关于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字符串");就可以了。
以上是学习的心得,大家有更好的方法可以告知在下,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了