移轉到 DataContractSerializer (XML)
.NET 基底類別程式庫提供兩個 XML 序列化程式:XmlSerializer 和 DataContractSerializer。 這兩者之間有一些細微的差異,但為了進行移轉,本節只著重於 DataContractSerializer
。 為什麼? 因為此程式完全支援 BinaryFormatter
所使用的 serialization 程序設計模型。 已標示為 [Serializable]
或實作 ISerializable
的所有類型都可以使用 DataContractSerializer
序列化。 訣竅在哪裡? 已知類型必須預先指定。 您必須知道這些類型,並能夠取得 Type
,即使是私人類型。
不需要指定最受歡迎的集合或基本類型,例如 string
或 DateTime
(序列化程式有自己的預設允許清單) ,但有類似 DateTimeOffset
的例外狀況。 有關支援的類型的詳細資訊,請參閱資料合約序列化程式支援的類型。
部分信任是未移植到 .NET (Core) 的 .NET Framework 功能。 如果您的程式碼在 .NET Framework 上執行並使用此功能,請閱讀可能適用於這類案例的限制。
逐步移轉
- 尋找
BinaryFormatter
的所有使用方式。 - 請確定測試涵蓋 serialization 程式碼路徑,因此您可以驗證變更,並避免引入錯誤。
- 您不需要安裝任何套件,因為
DataContractSerializer
.NET Core 是核心資料庫的一部分。 - 尋找使用
BinaryFormatter
序列化的所有類型。 您不需要修改其中任何套件,但您可能需要透過DataContractSerializer
引數的knownTypes
建構函式列出這些套件。 - 使用
DataContractSerializer
取代BinaryFormatter
。
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});