關於我
引言
json是我們在工作中經常用到的一種資料傳輸格式,開始過程中解析json是我們經常面對的問題。NewtonsoftJson是c#的一套json處理封裝類,它可以高效,方便地幫助我們處理json。
NetonSoftJson提供了完整的使用文件,文件地址如下:Json.NET Documentation
NetonSoftJson的不同使用場景
常用方法 序列化和反序列化
這應該是我們最常用的倆個方法了
JsonConvert.DeserializeObject<T>(string json)//反序列化
JsonConvert.SerializeObject(object obj) //序列化
高階特性
參考文章 Newtonsoft.Json高階用法
某些欄位不想被反序列化
使用JsonIgnore特性標籤
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
[JsonIgnore]
public string Sex { get; set; }
}
自定義序列化名稱
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
[JsonProperty(PropertyName = "SepcialSex")]
public string Sex { get; set; }
}
解析字面量字串
首先構建一個json物件,描述了一個老師的實體,裡面包含老師的基本屬性(名稱、年齡),所管理的班級屬性,所管理的班級的學生陣列
{
"name": "張三",
"age": "10",
"classroom": {
"name": "1年級1班",
"desc": "描述"
},
"students": [
{
"age": "小名"
},
{
"age": "小紅"
}
]
}
接下來我們使用Newtonsoftjson解析字串並獲取到我們需要的資訊
string jsonStr = "{\"name\":\"張三\",\"age\":\"10\",\"classroom\":{\"name\":\"1年級1班\",\"desc\":\"描述\"},\"students\":[{\"name\":\"小名\"},{\"name\":\"小紅\"}]}";
JObject jObject = JObject.Parse(jsonStr);
獲取姓名
Console.WriteLine("name is " + jObject["name"].ToString());
Console.WriteLine("age is " + jObject.GetValue("age").ToString());
獲取班級資訊
Console.WriteLine("classroom name is " + jObject["classroom"]["name"]);
獲取學生資訊
JArray jArray = JArray.Parse(jObject["students"].ToString());
foreach (var arr in jArray)
{
JObject jObj = JObject.Parse(arr.ToString());
string name = jObj["name"].ToString();
Console.WriteLine("student name is " + name);
}
判斷key是否存在
//key 不存在
if (jObject.Property("abc") != null)
{
Console.WriteLine(jObject.Property("abc").Value.ToString());
}
else
{
Console.WriteLine("當前key不存在");
}
WebApi下的應用
專案開發中不管是前臺還是後臺都會遇到煩人的null,資料庫表中欄位允許空值,則程式碼實體類中對應的欄位型別為可空型別Nullable<>,如int?,DateTime?,null值欄位序列化返回的值都為null,前臺對應欄位賦值需要做null值判斷,怎麼才能全域性把null替換為空。
.NET Core 處理 WebAPI JSON 返回煩人的null為空
總結
Json的使用遠不止於此,作者只是針對自己到現在為止工作中常見的問題進行一個整理,後續也會慢慢補充新的內容,將文章不斷地更新優化。
The END
本文到此結束,希望對你有幫助 ?
更多精彩 技術文章彙總在我的 公眾號程式設計師工具集 ,持續更新,歡迎關注訂閱收藏。
如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。
福利姬
公眾號後臺回覆:“關注禮包”,獲取價值5K的視訊學習資源
公眾號後臺回覆:“技能圖譜”,送你一份最全的開發者技能圖譜