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
- Encontre todos os usos de
BinaryFormatter
. - 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.
- Você não precisa instalar pacotes, pois
DataContractSerializer
faz parte das bibliotecas do .NET Core. - Encontre todos os tipos que estão sendo serializados com
BinaryFormatter
. Você não precisa modificá-los, mas talvez precise listá-los pelo argumentoknownTypes
do construtorDataContractSerializer
. - Substitua o uso de
BinaryFormatter
porDataContractSerializer
.
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});