Migrovat na DataContractSerializer (XML)

.NET knihovny základních tříd 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 programovací model serializace, který byl používán BinaryFormatter. Všechny typy, které jsou již označeny jako [Serializable] nebo implementují ISerializable, lze serializovat pomocí DataContractSerializer. Kde je ten úlovek? Známé typy musí být zadány předem. Musíte je znát a umět získat Type, i pro privátní 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.

Migrace krok za krokem

  1. Vyhledejte všechna použití BinaryFormatter.
  2. Ujistěte se, že jsou cesty kódu serializace pokryté testy, takže můžete ověřit změny a vyhnout se zavedení chyb.
  3. Nemusíte instalovat žádné balíčky, protože DataContractSerializer jsou součástí knihoven .NET Core.
  4. Vyhledejte všechny typy, které jsou serializovány pomocí BinaryFormatter. Nemusíte je upravovat, ale možná je budete muset vypsat pomocí knownTypes argumentu konstruktoru DataContractSerializer .
  5. Nahraďte použití parametrem BinaryFormatterDataContractSerializer.
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });