【问题标题】:How to parse this json result without making class in C#如何解析这个 json 结果而不在 C# 中创建类
【发布时间】:2019-10-24 06:21:55
【问题描述】:

如何在 c# 中解析这个没有类的 json。我不知道该使用数组还是其他任何东西。

这是我要解析的json结果

{
    "success": true,
    "status": 200,
    "message": "SUCCESS",
    "response": {
        "message": "Device Registered",
        "data": [
            {
                "ID": "607dbb9e08b4c22a",
                "Type_ID": "657911C6-AFA5-4AC4-922F-39E56CCB28CC",
                "Name": "Genymotion Google Nexus 5X",
                "Active": "1",
                "Insert_User": "Default",
                "Insert_Date": "2019-10-18 16:33:01.650",
                "Update_User": "Default",
                "Update_Date": "2019-10-18 16:33:01.650"
            }
        ]
    }
}

【问题讨论】:

  • 你可以使用 linq-to-json。
  • 阅读JObject。这就是你需要的。 newtonsoft.com/json/help/html/…
  • 如果您只需要一个值,请按照建议进行操作,如果您想节省时间和代码,则只需将其反序列化为具体类(以实际节省时间和代码)跨度>
  • 我同意@TheGeneral,为您的 JSON 数据生成类。这将需要 5 分钟,但将来会为您节省大量时间。

标签: c# json serialization


【解决方案1】:

谢谢大家,我只是弄清楚我自己。 我就是这样做的。


public async Task<string> CheckDevice(string id)
        {
            var uri = new Uri(string.Format(Constant.CheckDevicesRegistration + "id=" + id, string.Empty));

            try
            {
                var response = await client.GetAsync(uri);
                if (response.IsSuccessStatusCode)
                {
                    var result = await response.Content.ReadAsStringAsync();
                    var jsonData = (JObject)JsonConvert.DeserializeObject(result);

                    var message = jsonData["response"]["message"].Value<string>();

                    resultService = message;
                }
            }
            catch
            {
                resultService = "Connection-Error";
            }
            return resultService;
        }

【讨论】:

    【解决方案2】:

    你可以在 StackOverflow 上查看这个帖子:Getting nested properties with System.Text.Json

    【讨论】:

      【解决方案3】:

      您可以使用 Json.NET https://www.newtonsoft.com/json

      文档在这里

      https://www.newtonsoft.com/json/help/html/SerializingJSON.htm

      简短说明:

      对于序列化(对象转字符串):

      string text = JsonConvert.SerializeObject(object);
      

      对于反序列化(字符串到对象)

      var jsonobject = JsonConvert.DeserializeObject(jsonstring);
      

      如果你想反序列化匿名类型,你可以使用这个文档,很简单

      https://www.newtonsoft.com/json/help/html/DeserializeAnonymousType.htm

      【讨论】:

        【解决方案4】:

        您可以使用dynamic 而不是创建对象。但是动态对象比普通类花费更多的资源。如果您有性能问题,我不推荐您;如果不在这里你去:

          string json = @"[
          {
            'Title': 'Json.NET is awesome!',
            'Author': {
              'Name': 'James Newton-King',
              'Twitter': '@JamesNK',
              'Picture': '/jamesnk.png'
            },
            'Date': '2013-01-23T19:30:00',
            'BodyHtml': '&lt;h3&gt;Title!&lt;/h3&gt;\r\n&lt;p&gt;Content!&lt;/p&gt;'
          }
        ]";
        
        dynamic blogPosts = JArray.Parse(json);
        
        dynamic blogPost = blogPosts[0];
        
        string title = blogPost.Title;
        
        Console.WriteLine(title);
        // Json.NET is awesome!
        
        string author = blogPost.Author.Name;
        
        Console.WriteLine(author);
        // James Newton-King
        
        DateTime postDate = blogPost.Date;
        
        Console.WriteLine(postDate);
        // 23/01/2013 7:30:00 p.m.
        

        更多文档请查看here

        【讨论】:

          【解决方案5】:

          你可以使用 JObject 来解析 json

              dynamic response = JObject.Parse(jsonString);
              success   = response ?.success;
          

          【讨论】:

          • 这无关紧要,因为问题是专门没有创建类的
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多