???? 用C#解析JSON數(shù)據(jù)?這一篇讓你少走3小時彎路! ????
問題現(xiàn)場
當(dāng)你從物聯(lián)網(wǎng)設(shè)備收到如下JSON數(shù)據(jù)時,是否曾為解析頭疼過?特別地Tasg是一個動態(tài)的列表。此時我們需要動態(tài)解析。
{
"IP": "192.168.1.3",
"Status": "Time out",
"Tags": {
"DO1": null,
"AO1": null,
"AD1": null
}
}
痛點直擊:
如何快速提取IP和狀態(tài)?
嵌套的Tags
對象如何處理?
null
值會引發(fā)異常嗎?
代碼寫起來又臭又長?
??? 解決方案(直接上代碼!)
第一步:安裝Newtonsoft.Json
bash
復(fù)制
Install-Package Newtonsoft.Json -Version 13.0.1
第二步:動態(tài)解析核心代碼
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($"標(biāo)簽名:{tag.Name},值:{tag.Value}");
}
JToken do1 = tags["DO1"];
Console.WriteLine($"DO1是否為null:{do1 == null}");
}
}
?? 關(guān)鍵技巧解析
1?? 動態(tài)解析 vs 強類型解析
2?? Null值處理
3?? 遍歷嵌套對象
Properties()
方法一鍵獲取所有屬性,無需預(yù)先知道字段名。
4?? 防崩秘籍:安全訪問
csharp
復(fù)制
string ip = data.Value<string>("IP") ?? "未知IP";
擴展應(yīng)用:強類型解析
適合需要將JSON映射到業(yè)務(wù)對象的場景:
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?? 類型轉(zhuǎn)換錯誤? 用try-catch
包裹或先用JToken.Type
判斷類型。
3?? 性能優(yōu)化:頻繁解析時,優(yōu)先用JsonConvert.DeserializeObject
。
實測結(jié)果
運行文中代碼,控制臺輸出:
標(biāo)簽名:DO1,值:
標(biāo)簽名:AO1,值:
標(biāo)簽名:AD1,值:
IP: 192.168.1.3
Status: Time out
DO1是否為null:True
?? 總結(jié)
技術(shù)棧:C# + Newtonsoft.Json
適用場景:物聯(lián)網(wǎng)數(shù)據(jù)處理、API接口解析、配置文件讀取
閱讀原文:原文鏈接
該文章在 2025/4/9 12:09:59 編輯過