Миграция на DataContractSerializer (XML)

Библиотеки базовых классов .NET предоставляют два xml-сериализатора: XmlSerializer и DataContractSerializer. Существуют некоторые тонкие различия между этими двумя, но для целей миграции в этом разделе основное внимание уделяется только DataContractSerializer. Почему? Потому что она полностью поддерживает модель программирования на основе сериализации, которая использовалась BinaryFormatter. Все типы, которые уже помечены как [Serializable] или реализуются ISerializable , можно сериализовать с DataContractSerializerпомощью . Где улов? Известные типы должны быть указаны заранее. Их необходимо знать и иметь возможность получить Typeдаже для частных типов.

Не обязательно указывать наиболее популярные коллекции или примитивные типы, например string или DateTime (сериализатор имеет собственный список разрешений по умолчанию), но существуют такие исключения DateTimeOffset. Дополнительные сведения о поддерживаемых типах см. в разделе "Типы", поддерживаемые сериализатором контракта данных.

Частичное доверие — это функция платформа .NET Framework, которая не была перенесена в .NET (Core). Если код выполняется на платформа .NET Framework и использует эту функцию, ознакомьтесь с ограничениями, которые могут применяться к такому сценарию.

Пошаговая миграция

  1. Найдите все сведения об использовании BinaryFormatter.
  2. Убедитесь, что пути кода сериализации рассматриваются тестами, поэтому вы можете проверить изменения и избежать возникновения ошибок.
  3. Вам не нужно устанавливать пакеты, так как DataContractSerializer это часть библиотек .NET Core.
  4. Найдите все типы, сериализованные с BinaryFormatterпомощью . Вам не нужно изменять их, но может потребоваться перечислить их с помощью knownTypes аргумента конструктора DataContractSerializer .
  5. Замените использование BinaryFormatterDataContractSerializer.
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });