共用方式為


移轉到 DataContractSerializer (XML)

.NET 基底類別程式庫提供兩個 XML 序列化程式:XmlSerializerDataContractSerializer。 這兩者之間有一些細微的差異,但為了進行移轉,本節只著重於 DataContractSerializer。 為什麼? 因為此程式完全支援 BinaryFormatter 所使用的 serialization 程序設計模型。 已標示為 [Serializable] 或實作 ISerializable 的所有類型都可以使用 DataContractSerializer 序列化。 訣竅在哪裡? 已知類型必須預先指定。 您必須知道這些類型,並能夠取得 Type即使是私人類型

不需要指定最受歡迎的集合或基本類型,例如 stringDateTime (序列化程式有自己的預設允許清單) ,但有類似 DateTimeOffset 的例外狀況。 有關支援的類型的詳細資訊,請參閱資料合約序列化程式支援的類型

部分信任是未移植到 .NET (Core) 的 .NET Framework 功能。 如果您的程式碼在 .NET Framework 上執行並使用此功能,請閱讀可能適用於這類案例的限制

逐步移轉

  1. 尋找 BinaryFormatter 的所有使用方式。
  2. 請確定測試涵蓋 serialization 程式碼路徑,因此您可以驗證變更,並避免引入錯誤。
  3. 您不需要安裝任何套件,因為 DataContractSerializer .NET Core 是核心資料庫的一部分。
  4. 尋找使用 BinaryFormatter 序列化的所有類型。 您不需要修改其中任何套件,但您可能需要透過 DataContractSerializer 引數的 knownTypes 建構函式列出這些套件。
  5. 使用 DataContractSerializer 取代 BinaryFormatter
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });