Migrera till DataContractSerializer (XML)
.NET-basklassbiblioteken innehåller två XML-serialiserare: XmlSerializer och DataContractSerializer. Det finns vissa subtila skillnader mellan dessa två, men för migreringen fokuserar det här avsnittet bara på DataContractSerializer
. Varför? Eftersom den har fullt stöd för serialization programmeringsmodellen som användes av BinaryFormatter
. Alla typer som redan är markerade som [Serializable]
eller implementerar ISerializable
kan serialiseras med DataContractSerializer
. Var är fångsten? Kända typer måste anges i förväg. Du behöver känna till dem och kunna få Type
, även för privata typer.
Det krävs inte att du anger de mest populära samlingarna eller primitiva typerna som string
eller DateTime
(serialiseraren har en egen standardlista för tillåtna), men det finns undantag som DateTimeOffset
. Mer information om vilka typer som stöds finns i Typer som stöds av datakontraktsserialiseraren.
Partiellt förtroende är en .NET Framework-funktion som inte har porterats till .NET (Core). Om koden körs på .NET Framework och använder den här funktionen läser du om de begränsningar som kan gälla för ett sådant scenario.
Stegvis migrering
- Hitta alla användningar av
BinaryFormatter
. - Se till att kodsökvägarna omfattas av tester, så att serialization du kan verifiera dina ändringar och undvika att införa buggar.
- Du behöver inte installera några paket, som
DataContractSerializer
ingår i .NET Core-biblioteken. - Hitta alla typer som serialiseras med
BinaryFormatter
. Du behöver inte ändra någon av dem, men du kan behöva lista dem viaknownTypes
argument förDataContractSerializer
konstruktorn. - Ersätt användningen av
BinaryFormatter
medDataContractSerializer
.
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});