1. Newtonsoft.Json 介紹
Newtonsoft.Json(一般稱 Json.NET)是 .NET 生態的開源 JSON 序列化與反序列化元件
- 2006 釋出第一版 Json.NET 1.0.1,目前主流版本已更新至 10+
- 最初相容 .NET 2.0,幾乎支援全部 .NET 框架(Framework/.NET Core/.NET 5+)
- 組件檔:
Newtonsoft.Json.dll,透過 NuGet 安裝使用 - 早期原始碼託管在 CodePlex,現已移轉至 GitHub,大量企業專案都在使用
2. JSON 是什麼
JSON(JavaScript Object Notation,JS物件標記)
- 輕量級、與程式語言無關的資料交換文字格式,並非 JavaScript 專用
- 核心結構:鍵值對
key:value;支援物件{}、陣列[]巢狀寫法
{"webname":"FoxDevelop","website":"foxdevelop.com","age":4,"students":[{"name":"tom"},{"name":"bill"}]}Code language: C# (cs)
二、實體類別定義(對應JSON結構)
Person.cs(學生物件)
namespace NewtonsoftDemo
{
public class Person
{
public string name { set; get; }
}
}Code language: C# (cs)
WebInfo.cs(外層主物件)
namespace NewtonsoftDemo
{
public class WebInfo
{
public string webname { set; get; }
public string website { set; get; }
public int age { set; get; }
public Person[] students { set; get; }
}
}Code language: C# (cs)
範例‑物件序列化為JSON
protected void Page_Load(object sender, EventArgs e)
{
// 1. 建立實體物件並設定屬性
WebInfo webInfo = new WebInfo();
webInfo.age = 4;
webInfo.webname = "FoxDevelop";
webInfo.website = "foxdevelop.com";
webInfo.students = new Person[]
{
new Person { name = "TOM" },
new Person { name = "JACK" }
};
// 2. Newtonsoft.Json 底層寫法:使用JsonWriter做序列化
StringWriter sw = new StringWriter();
JsonWriter writer = new JsonWriter(sw);
new JsonSerializer().Serialize(writer, webInfo);
string json = sw.GetStringBuilder().ToString();
}Code language: C# (cs)
日常開發的簡化寫法
Newtonsoft.Json 提供靜態工具方法,不用手動建立 JsonWriter:
// 一行完成序列化,開發最常使用
string json = JsonConvert.SerializeObject(webInfo);Code language: C# (cs)
輸出JSON結果
{
"webname": "FoxDevelop",
"website": "foxdevelop.com",
"age": "4",
"students": [
{"name":"TOM"},
{"name":"JACK"}
]
}Code language: C# (cs)
其他
- System.Text.Json:.NET Core 3.0 之後微軟內建的JSON函式庫;舊版 .NET Framework 專案大多還是使用 Newtonsoft.Json
- 功能:支援屬性別名、欄位忽略、日期格式化、迴圈參考處理等高級功能
介紹
Next: 序列化與反序列化