Eseguire la migrazione a DataContractSerializer (XML)
Le librerie di classi di base .NET forniscono due serializzatori XML: XmlSerializer e DataContractSerializer. Esistono alcune piccole differenze tra questi due, ma ai fini della migrazione, questa sezione è incentrata solo su DataContractSerializer
. Perché? Poiché supporta completamente il serialization modello di programmazione usato da BinaryFormatter
. Tutti i tipi già contrassegnati come [Serializable]
o implementano ISerializable
possono essere serializzati con DataContractSerializer
. Dov'è il trucco? I tipi noti devono essere specificati in anticipo. È necessario conoscerli ed essere in grado di ottenere Type
, anche per i tipi privati.
Non è necessario specificare le raccolte o i tipi primitivi più diffusi come string
o DateTime
(il serializzatore ha un proprio elenco di elementi consentiti predefiniti), ma esistono eccezioni come DateTimeOffset
. Per altre informazioni sui tipi supportati, vedere Tipi supportati dal serializzatore del contratto dati.
L'attendibilità parziale è una funzionalità di .NET Framework che non è stata portabilità in .NET (Core). Se il codice viene eseguito in .NET Framework e usa questa funzionalità, leggere le informazioni sulle limitazioni che potrebbero essere applicate a tale scenario.
Guida dettagliata alla migrazione
- Trovare tutti gli utilizzi di
BinaryFormatter
. - Assicurarsi che i percorsi di serialization codice siano trattati con i test, in modo da poter verificare le modifiche ed evitare di introdurre bug.
- Non è necessario installare alcun pacchetto, come
DataContractSerializer
fa parte delle librerie .NET Core. - Trovare tutti i tipi serializzati con
BinaryFormatter
. Non è necessario modificarli, ma potrebbe essere necessario elencarli tramiteknownTypes
l'argomento delDataContractSerializer
costruttore. - Sostituire l'utilizzo di
BinaryFormatter
conDataContractSerializer
.
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});