共用方式為


移轉至 System.Text.Json (JSON)

System.Text.Json 資料庫預設會強調字面上具決定性的行為,並會避免代表呼叫者進行任何猜測或解譯。 程式庫刻意以此種方式設計,以獲得安全性與效能。 雖然 System.Text.Json 高度可設定,其功能可以用來將對序列化類型所需的變更降至最低,但重要的是要考慮在儘量少改變現有類型和重構類型以實現慣用及安全的序列化之間的權衡。

從 BinaryFormatter 移轉至 System.Text.Json 時,請務必注意下列行為和選項:

  • 根據預設,欄位不會依 進行序列化或反序列化,但可以為了序列化而 註記。 或者,JsonSerializerOptions.IncludeFields 可以謹慎地設定為 true,以包含要序列化之類型的所有公用欄位。

    JsonSerializerOptions options = new()
    {
        IncludeFields = true
    };
    
  • 預設情況下,System.Text.Json忽略私有欄位和屬性。 透過使用 [JsonInclude] 屬性,可以在屬性上使用非公開的存取器。 包含私人欄位需要一些非簡單的額外工作

  • System.Text.Json 無法還原序列化唯讀欄位或屬性,但 [JsonConstructor] 屬性可用來指出指定的建構函式應該用來在還原序列化上建立類型的執行個體。 建構函式可以設置唯讀欄位和屬性。

  • 若要覆寫特定型別的預設序列化行為,您可以 撰寫自訂轉換器

  • 它支援許多集合的串行化和還原串行化,但有一定限制。 如需了解序列化和反序列化所支援的類型及集合的詳細資訊,請參閱 支援的類型 檔。

  • 某些情況下,它支援自定義泛型集合的序列化和反序列化。

  • 沒有內建支援的其他類型包括:DataSetDataTableDBNullTimeZoneInfoTypeValueTuple。 不過,您可以撰寫自訂轉換器來支援這些類型。

  • 支援多型型別階層的序列化和反序列化,那些類型已經透過 [JsonDerivedType] 屬性或自訂轉換器明確加入其中。 不支持開放式繼承階層,而且使用多型的來回行程需要所有已知衍生類型的類型歧視性標識符。

  • 屬性的 [JsonIgnore] 屬性會導致在序列化過程中,該屬性從 JSON 中被省略。

  • 若要在 System.Text.Json 中保留參考及處理循環參考,請將 JsonSerializerOptions.ReferenceHandler 設定為 ReferenceHandler.Preserve

  • Serialization 可以使用自訂合約進行廣泛自訂,並解除封鎖許多案例,同時將序列化類型的變更降到最低。