如何反序列化JSON字符串并在C#中正确解析它?

时间:2017-03-14 21:25:30

标签: c# json json.net

这个问题被多次询问,但答案不符合我的需要。 我有一个示例JSON字符串,它是一个JSON数组。 我想解析它并能够选择要打印的值

在我的第一堂课中,我将JSON下载到字符串中并使用jsonConvert.DeserializeObject解析它

   using Newtonsoft.Json;

   namespace JSON_parser_2
   {
class Program
{
    static void Main(string[] args)
    {
        WebClient client = new WebClient();
        string downloadedString =     client.DownloadString("https://jsonplaceholder.typicode.com/posts");
        var result = JsonConvert.DeserializeObject<jsonStorage>(downloadedString);

“JsonStorage”是我定义以下内容的类

    public string userId { get; set; }
    public string id { get; set; }
    public string title { get; set; }
    public string body { get; set; }

现在,在我的第一堂课中,我想要打印整个解析的JSON或仅打印标题或正文,我该怎么办呢? 最后,我想打印来自给定链接的所有样本评论。

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用Flurl.Http库检索json是强类型JsonStorage对象的列表。通过将其强制转换为强力对象列表,您可以控制打印哪些属性。只需下载Flurl.Http nuget包,然后您就可以使用以下代码:

using System;
using System.Collections.Generic;
using Flurl.Http;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var httpResponse = "https://jsonplaceholder.typicode.com/posts"
                            .GetJsonAsync<List<JsonStorage>>();

            httpResponse.Wait();

            var results = httpResponse.Result;

            foreach(var result in results)
            {
                Console.WriteLine($"title: {result.title}, body: {result.body}");
            }

            Console.ReadLine();
         }    
    }

    class JsonStorage
    {
        public string userId { get; set; }
        public string id { get; set; }
        public string title { get; set; }
        public string body { get; set; }
    }
}

答案 1 :(得分:0)

public class jsonStorage
{
    // your properties here
    ...
    ...
    // override the ToString
    public override string ToString()
    {
        return "userid=" + userId + Environment.NewLine +
               "id=" + id + Environment.NewLine +
               "title=" + title + Environment.NewLine +
               "body=" + body;
    }
}

主要是在反序列化之后,执行ToString()

var result = JsonConvert.DeserializeObject<jsonStorage>(downloadedString);
Console.WriteLine(result.ToString());