用C#解析JSON数据?这一篇让你少走3小时弯路!
|
admin
2025年4月9日 0:38
本文热度 1531
|
👇👇 用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 编辑过