???? 用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 編輯過