Compartilhar via


Migrar para DataContractSerializer (XML)

As bibliotecas de classes base do .NET fornecem dois serializadores XML: XmlSerializer e DataContractSerializer. Há algumas diferenças sutis entre esses dois, mas para fins de migração, esta seção se concentra apenas no DataContractSerializer. Por quê? Porque ele suporta totalmente o modelo de programação serialization que foi usado por BinaryFormatter. Todos os tipos que já estão marcados como [Serializable] ou implementam ISerializable podem ser serializados com DataContractSerializer. Onde está a pegadinha? Os tipos conhecidos devem ser especificados antecipadamente. Você precisa conhecê-los e conseguir obter o Type, mesmo para os tipos privados.

Não é necessário especificar coleções mais populares ou tipos primitivos como string ou DateTime (o serializador tem sua própria lista de permissões padrão), mas há exceções como DateTimeOffset. Para obter mais informações sobre os tipos com suporte, consulte Tipos compatíveis com o serializador do contrato de dados.

A Confiança parcial é um recurso do .NET Framework que não foi portado para o .NET (Core). Se o código for executado no .NET Framework e usar esse recurso, leia sobre as limitações que podem se aplicar a esse cenário.

Migração passo a passo

  1. Encontre todos os usos de BinaryFormatter.
  2. Certifique-se de que os caminhos de serialization código sejam cobertos com testes, para que você possa verificar suas alterações e evitar a introdução de bugs.
  3. Você não precisa instalar pacotes, pois DataContractSerializer faz parte das bibliotecas do .NET Core.
  4. Encontre todos os tipos que estão sendo serializados com BinaryFormatter. Você não precisa modificá-los, mas talvez precise listá-los pelo argumento knownTypes do construtor DataContractSerializer.
  5. Substitua o uso de BinaryFormatter por DataContractSerializer.
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });