用C#解析JSON数据?这一篇让你少走3小时弯路!
				
									
					
					
						|  | 
							admin 2025年4月9日 0:38
								本文热度 1580 | 
					
				 
				👇👇 用C#解析JSON数据?这一篇让你少走3小时弯路! 👇👇
问题现场
当你从物联网设备收到如下JSON数据时,是否曾为解析头疼过?特别地Tasg是一个动态的列表。此时我们需要动态解析。
{    "IP": "192.168.1.3",    "Status": "Time out",    "Tags": {        "DO1": null,        "AO1": null,        "AD1": null    }}
痛点直击:
- 如何快速提取IP和状态? 
- 嵌套的- Tags对象如何处理?
 
- null值会引发异常吗?
 
- 代码写起来又臭又长? 
 
 
🛠️ 解决方案(直接上代码!)
第一步:安装Newtonsoft.Json
bash
复制
Install-Package Newtonsoft.Json -Version 13.0.1
第二步:动态解析核心代码
using Newtonsoft.Json.Linq;using System;
class Program{    static void Main()    {                JObject data = JObject.Parse(json);
                string ip = (string)data["IP"];         string status = (string)data["Status"]; 
                JObject tags = (JObject)data["Tags"];        foreach (var tag in tags.Properties())        {            Console.WriteLine($"标签名:{tag.Name},值:{tag.Value}");        }
                JToken do1 = tags["DO1"];        Console.WriteLine($"DO1是否为null:{do1 == null}");     }}
🔑 关键技巧解析
1️⃣ 动态解析 vs 强类型解析
2️⃣ Null值处理
3️⃣ 遍历嵌套对象
Properties()方法一键获取所有属性,无需预先知道字段名。
4️⃣ 防崩秘籍:安全访问
csharp
复制
string ip = data.Value<string>("IP") ?? "未知IP";
 扩展应用:强类型解析
适合需要将JSON映射到业务对象的场景:
csharp
public class DeviceData{    public string IP { get; set; }    public string Status { get; set; }    public Dictionary<string, object> Tags { get; set; }}
var device = JsonConvert.DeserializeObject<DeviceData>(json);Console.WriteLine(device.Tags["DO1"]); 
 避坑指南
1️⃣ 字段不存在? 用data.ContainsKey("字段名")先判断!
2️⃣ 类型转换错误? 用try-catch包裹或先用JToken.Type判断类型。
3️⃣ 性能优化:频繁解析时,优先用JsonConvert.DeserializeObject。
实测结果
运行文中代码,控制台输出:
标签名:DO1,值:标签名:AO1,值:标签名:AD1,值:IP: 192.168.1.3Status: Time outDO1是否为null:True
🌟 总结
- 简单结构用- JObject动态解析,5行代码搞定
 
- 复杂场景用强类型解析,维护性更高 
- Null值不可怕,直接判断即可 
技术栈:C# + Newtonsoft.Json
适用场景:物联网数据处理、API接口解析、配置文件读取
阅读原文:原文链接
该文章在 2025/4/9 12:09:59 编辑过