Dela via


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

  1. Hitta alla användningar av BinaryFormatter.
  2. Se till att kodsökvägarna omfattas av tester, så att serialization du kan verifiera dina ändringar och undvika att införa buggar.
  3. Du behöver inte installera några paket, som DataContractSerializer ingår i .NET Core-biblioteken.
  4. Hitta alla typer som serialiseras med BinaryFormatter. Du behöver inte ändra någon av dem, men du kan behöva lista dem via knownTypes argument för DataContractSerializer konstruktorn.
  5. Ersätt användningen av BinaryFormatter med DataContractSerializer.
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });