Sdílet prostřednictvím


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

  1. Vyhledejte všechna použití BinaryFormatter.
  2. Ujistěte se, že serialization jsou cesty kódu pokryté testy, abyste mohli ověřit změny a vyhnout se chybám.
  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 BinaryFormatter DataContractSerializer.
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });