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