LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

用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()    {        // 1️⃣ 解析JSON字符串        JObject data = JObject.Parse(json);
        // 2️⃣ 提取基础字段        string ip = (string)data["IP"]; // "192.168.1.3"        string status = (string)data["Status"]; // "Time out"
        // 3️⃣ 处理嵌套对象        JObject tags = (JObject)data["Tags"];        foreach (var tag in tags.Properties())        {            Console.WriteLine($"标签名:{tag.Name},值:{tag.Value}");        }
        // 4️⃣ 安全访问null值        JToken do1 = tags["DO1"];        Console.WriteLine($"DO1是否为null:{do1 == null}"); // True    }}

🔑 关键技巧解析

1️⃣ 动态解析 vs 强类型解析

  • 动态解析(本文方法):适合不确定JSON结构的场景(如第三方接口),用JObject像操作字典一样灵活。

  • 强类型解析:适合稳定结构,先定义类再用JsonConvert.DeserializeObject<T>(文末附代码)。

2️⃣ Null值处理

  • JSON中的null会被转换为JToken类型的null直接判断即可,无需担心空引用异常!

3️⃣ 遍历嵌套对象

Properties()方法一键获取所有属性,无需预先知道字段名。

4️⃣ 防崩秘籍:安全访问

  • data.Value<string>("字段名")代替强制转换,避免字段缺失时报错:

csharp

复制

string ip = data.Value<string>("IP") ?? "未知IP";

 扩展应用:强类型解析

适合需要将JSON映射到业务对象的场景:

csharp

public class DeviceData{    public string IP { getset; }    public string Status { getset; }    public Dictionary<stringobject> Tags { getset; }}
// 使用方式var device = JsonConvert.DeserializeObject<DeviceData>(json);Console.WriteLine(device.Tags["DO1"]); // 输出null

 避坑指南

1️⃣ 字段不存在? 用data.ContainsKey("字段名")先判断!
2️⃣ 类型转换错误? 用try-catch包裹或先用JToken.Type判断类型。
3️⃣ 性能优化:频繁解析时,优先用JsonConvert.DeserializeObject

实测结果

运行文中代码,控制台输出:

标签名:DO1,值:标签名:AO1,值:标签名:AD1,值:IP: 192.168.1.3Status: Time outDO1是否为nullTrue

🌟 总结

  • 简单结构JObject动态解析,5行代码搞定

  • 复杂场景用强类型解析,维护性更高

  • Null值不可怕,直接判断即可

技术栈:C# + Newtonsoft.Json
适用场景:物联网数据处理、API接口解析、配置文件读取


阅读原文:原文链接


该文章在 2025/4/9 12:09:59 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved