C#操作JSON(序列化與反序列化)的方法詳解
c#操作json(序列化與反序列化)的方法詳解
.net core提供了json處理模塊,在命名空間system.text.json中,下面通過頂級語句,對c#的json功能進行講解。
序列化
將c#對象編輯為json格式字符串的過程,即為json序列化,在c#中,通過jsonserializer.serialize來實現
using system.text.json; public class weatherinfo { public datetimeoffset date { get; set; } public int temperature { get; set; } public string? summary { get; set; } } var winfo = new weatherinfo { date = datetime.now, temperature = 25, summary = "hot" }; string js = jsonserializer.serialize(winfo); file.writealltext("test.json", js); //將其輸出為文件 console.writeline(js);
上例中,winfo是weatherinfo的對象,通過json序列化,成功將其轉化為字符串,輸出結果如下
{"date":"2023-05-11t15:52:49.4942993+08:00","temperature":25,"summary":"hot"}
反序列化
將json字符串讀取為c#對象的過程,即為反序列化,以剛剛創建的test.json為例,通過泛型函數deserialize,可將其轉化為c#對象
string js = file.readalltext("test.json"); var w = jsonserializer.deserialize(js); console.writeline($"{w.date}\r\n{w.temperature}\r\n{w.summary}");
測試結果為
2023/5/11 15:54:46 +08:00
25
hot
與字典互轉
考慮到并非所有json數據都能找到c#中對應的類,為了更加靈活地操作json數據,在實際使用中,可以建立json和字典的轉換方法。如果仍然使用system.text.json中的方法,則需要繼承抽象類jsonconverter,并重寫其中用于轉換的內容,相對來說比較麻煩,所以推薦使用經典的newtonsoft.json,需要在nuget中搜索添加。
在newtonsoft.json中,函數jsonconvert.deserializeobject完全具備system.text.json中jsonserializer.deserialize的所有功能,同時開可以將泛型變量設為字典
using newtonsoft.json; var dct = jsonconvert.deserializeobject