介紹

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
  • 功能:支援屬性別名、欄位忽略、日期格式化、迴圈參考處理等高級功能

介紹

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *