.NET 中的 JSON 串行化和還原串行化 - 概觀
System.Text.Json 命名空間提供將 JavaScript 物件表示法 (JSON) 進行序列化和反序列化的功能。 序列化是將物件狀態轉換成可儲存或傳輸表單屬性值的程序。 序列化表單不包含物件相關聯方法的任何資訊。 還原序列化會從序列化形式重新建構物件。
比起廣泛的功能集,System.Text.Json
程式庫設計更強調的是高效能以及低記憶體配置。 內建的 UTF-8 支援可在讀取和寫入編碼為 UTF-8 的 JSON 文字時將程序最佳化,而 UTF-8 是網路資料及磁碟檔案最常用的編碼方式。
程式庫也提供可使用記憶體內部文件物件模型 (DOM) 的類別。 這項功能可讓您隨機存取 JSON 檔案或字串中的項目。
對於 Visual Basic,您可以使用的程式庫部分有一些限制。 如需詳細資訊,請參閱 Visual Basic 支援。
如何取得程式庫
若為 .NET Core 3.0 和更新版本,程式庫會內建為共用架構的一部分。 若為 .NET 6 和更新版本,則來源產生功能會內建為共用架構的一部分。
若架構版本早於 .NET Core 3.0,請安裝 System.Text.Json NuGet 套件。 該套件支援下列版本:
- .NET Standard 2.0 和更新版本
- .NET Framework 4.6.2 和更新版本
- .NET 8 和更新版本
命名空間和 API
- System.Text.Json 命名空間包含所有進入點和主要型別。
- System.Text.Json.Serialization 命名空間包含將進階案例的屬性和 API,以及特有的自訂序列化和還原序列化。
- System.Net.Http.Json 命名空間包含 從網路串行化和還原串行化 JSON 承載的擴充方法。
重要
System.Text.Json
不支援先前可能已使用的下列序列化 API:
- System.Runtime.Serialization 命名空間的屬性。
- System.SerializableAttribute 屬性和 ISerializable 介面。 這些型別僅用於二進位和 XML 序列化。
反映與來源產生
根據預設,System.Text.Json
會使用反映來收集存取物件屬性所需的中繼資料,以在執行階段進行序列化和還原序列化。 作為替代方式,System.Text.Json
也可以使用 C# 來源產生功能來改善效能、減少私人記憶體用量,以及輔助組件調整,以降低應用程式大小。
如需詳細資訊,請參閱反映與來源產生。
安全性資訊
如需了解設計 JsonSerializer 時考量的安全性威脅,以及減輕這類威脅的方式,請參閱 System.Text.Json
威脅模型。
執行緒安全
System.Text.Json
序列化程式的設計考慮了執行緒安全性。 實際上,這表示一旦鎖定,JsonSerializerOptions 執行個體就可以安全地跨多個執行緒共用。
JsonDocument 在 .NET 8 和更新版本中,提供 JSON 值不可變且安全執行緒的 DOM 表示法。