用C#解析JSON数据?这一篇让你少走3小时弯路!
|
admin
2025年4月9日 0:38
本文热度 163
|
👇👇 用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.3
Status: Time out
DO1是否为null:True
🌟 总结
简单结构用JObject
动态解析,5行代码搞定
复杂场景用强类型解析,维护性更高
Null值不可怕,直接判断即可
技术栈:C# + Newtonsoft.Json
适用场景:物联网数据处理、API接口解析、配置文件读取
阅读原文:原文链接
该文章在 2025/4/9 12:09:59 编辑过