Migrace na DataContractSerializer (XML)
Knihovny základních tříd .NET poskytují dva serializátory XML: XmlSerializer a DataContractSerializer. Mezi těmito dvěma jsou některé drobné rozdíly, ale pro účely migrace se tato část zaměřuje pouze na DataContractSerializer
. Proč? Protože plně podporuje serialization programovací model, který byl používán BinaryFormatter
. Všechny typy, které jsou již označeny jako [Serializable]
nebo implementovat ISerializable
lze serializovat pomocí DataContractSerializer
. Kde je ten úlovek? Známé typy musí být zadány předem. Potřebujete je znát a být schopni získat Type
, i pro soukromé typy.
Není nutné zadávat nejoblíbenější kolekce nebo primitivní typy jako string
nebo DateTime
(serializátor má vlastní výchozí seznam povolených), ale existují výjimky jako DateTimeOffset
. Další informace o podporovaných typech naleznete v části Typy podporované serializátorem kontraktů dat.
Částečná důvěryhodnost je funkce rozhraní .NET Framework, která nebyla portována do .NET (Core). Pokud váš kód běží v rozhraní .NET Framework a používá tuto funkci, přečtěte si o omezeních , která se můžou v takovém scénáři týkat.
Podrobná migrace
- Vyhledejte všechna použití
BinaryFormatter
. - Ujistěte se, že serialization jsou cesty kódu pokryté testy, abyste mohli ověřit změny a vyhnout se chybám.
- Nemusíte instalovat žádné balíčky, protože
DataContractSerializer
jsou součástí knihoven .NET Core. - Vyhledejte všechny typy, které jsou serializovány pomocí
BinaryFormatter
. Nemusíte je upravovat, ale možná je budete muset vypsat pomocíknownTypes
argumentu konstruktoruDataContractSerializer
. - Nahraďte použití parametrem
BinaryFormatter
DataContractSerializer
.
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});