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