关于Newtonsoft.Json解析json字符串

最近遇到了一个解析json字符串的问题。由于嵌套的节点较多,刚开始通过遍历的方式去获取,但是遍历首先就是逻辑麻烦,然后想要你需要的东西可能会比较困难。后面发现json的节点是不变的,那么可以通过JsonConvert将json字符串转成指定的model,而这个model所含有的字段要和字符串中的节点一样,如果节点下还有嵌套的,那么再将此节点写成一个model,依次类推。

有这样一个字符串:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
    "message": {
        "event_type": "transcodeComplete",
        "transcode_info": {
            "title": "title",
            "status": "SUCCEED",
            "template_group_name": "mp4_adptive_template_group",
            "output": [
                {
                    "play_type": "MP4",
                    "url": "https://www.baidu.com",
                    "encrypted": 0,
                    "meta_data": {
                        "play_type": 0,
                        "codec": "H.264",
                        "duration": 57,
                        "video_size": 18359296,
                        "width": 1280,
                        "hight": 720,
                        "bit_rate": 2499,
                        "frame_rate": 0,
                        "audio_channels": 0
                    }
                }
            ],
            "asset_id": "3ada15adc1df40ce0b2a7f98c35ca2de"
        }
    }
}

  我们可以将其写成几个model,一个大的model,msg,包含所有信息,就叫message吧。其下还有transcode_info,transcode_info下还有output,记住,output是一个数组,需要用list来存储,output下还有meta_data。就这样。记住:名称必须和节点名称一致!名称必须和节点名称一致!名称必须和节点名称一致!

下面开始:

Message:

1
2
3
4
5
6
7
8
9
10
11
public class Message
   {
       /// <summary>
       ///
       /// </summary>
       public string event_type { get; set; }
       /// <summary>
       ///
       /// </summary>
       public Transcode_info transcode_info { get; set; }
   }

  Transcode_info

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Transcode_info
  {
 
      /// <summary>
      ///
      /// </summary>
      public string title { get; set; }
      /// <summary>
      ///
      /// </summary>
      public string asset_id { get; set; }
      /// <summary>
      ///
      /// </summary>
      public string status { get; set; }
      /// <summary>
      ///
      /// </summary>
      public string templateGroupName { get; set; }
      /// <summary>
      ///
      /// </summary>
      public List<OutputItem> output { get; set; }
      /// <summary>
      ///
      /// </summary>
      public string error_code { get; set; }
 
      /// <summary>
      ///
      /// </summary>
      public string error_msg { get; set; }
  }

  Output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class OutputItem
   {
       /// <summary>
       ///
       /// </summary>
       public string play_type { get; set; }
       /// <summary>
       ///
       /// </summary>
       public string url { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int encrypted { get; set; }
 
       /// <summary>
       ///
       /// </summary>
       public string quality { get; set; }
       /// <summary>
       ///
       /// </summary>
       public meta_data meta_data { get; set; }
   }

  meta_data:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class meta_data
   {
       /// <summary>
       ///
       /// </summary>
       public int play_type { get; set; }
       /// <summary>
       ///
       /// </summary>
       public string codec { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int duration { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int video_size { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int width { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int hight { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int bit_rate { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int frame_rate { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int quality { get; set; }
       /// <summary>
       ///
       /// </summary>
       public int audio_channels { get; set; }
   }

  以上,就是对所有节点建立的model。

然后进行转换的时候,只需要

  Message msg = JsonConvert.DeserializeObject<Message>("你的json字符串");就可以了。

以上是学习的心得,大家有更好的方法可以告知在下,谢谢!

 
posted @   游园惊梦、  阅读(616)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示