Migreren naar DataContractSerializer (XML)
De .NET-basisklassebibliotheken bieden twee XML-serializers: XmlSerializer en DataContractSerializer. Er zijn enkele subtiele verschillen tussen deze twee, maar voor het doel van de migratie richt deze sectie zich alleen op DataContractSerializer
. Waarom? Omdat het volledig ondersteuning biedt voor het serialisatieprogrammeermodel dat door BinaryFormatter
is gebruikt. Alle typen die al zijn gemarkeerd als [Serializable]
of geïmplementeerd ISerializable
, kunnen worden geserialiseerd met DataContractSerializer
. Waar is de vangst? Bekende typen moeten vooraf worden opgegeven. U moet ze kennen en de Type
, zelfs voor privétypen kunnen krijgen.
Het is niet vereist om de populairste verzamelingen of primitieve typen op te geven, zoals string
of DateTime
(de serializer heeft een eigen standaard acceptatielijst), maar er zijn uitzonderingen zoals DateTimeOffset
. Zie Typen die worden ondersteund door de serializer van het gegevenscontract voor meer informatie over de ondersteunde typen.
Gedeeltelijke vertrouwensrelatie is een .NET Framework-functie die niet is overgezet naar .NET (Core). Als uw code wordt uitgevoerd op .NET Framework en deze functie gebruikt, leest u meer over de beperkingen die van toepassing kunnen zijn op een dergelijk scenario.
Stapsgewijze migratie
- Zoek alle gebruiksgegevens van
BinaryFormatter
. - Zorg ervoor dat de serialisatiecodepaden worden behandeld met tests, zodat u uw wijzigingen kunt controleren en fouten kunt voorkomen.
- U hoeft geen pakketten te installeren, zoals
DataContractSerializer
onderdeel is van de .NET Core-bibliotheken. - Zoek alle typen waarmee wordt geserialiseerd
BinaryFormatter
. U hoeft ze niet te wijzigen, maar mogelijk moet u deze weergeven viaknownTypes
het argument van deDataContractSerializer
constructor. - Vervang het gebruik door
BinaryFormatter
DataContractSerializer
.
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});