• 关于Newtonsoft.Json解析json字符串


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

    有这样一个字符串:

    {
        "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:

     public class Message
        {
            /// <summary>
            /// 
            /// </summary>
            public string event_type { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public Transcode_info transcode_info { get; set; }
        }
    

      Transcode_info

      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

     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:

     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字符串");就可以了。

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

     
  • 相关阅读:
    反射
    jQuery之Dom操作
    Jquery学习开篇
    c#构造函数
    c#之委托
    DataX启动步骤解析
    JobContainer
    DataX 启动配置
    DataX源码分析(2)
    DataX源码分析(1)
  • 原文地址:https://www.cnblogs.com/fanlin92/p/12937988.html
Copyright © 2020-2023  润新知