Migrar para DataContractSerializer (XML)
As bibliotecas de classes base do .NET fornecem dois serializadores XML: XmlSerializer e DataContractSerializer. Existem algumas diferenças sutis entre esses dois, mas para fins de migração, esta seção se concentra apenas em DataContractSerializer
. Porquê? Porque suporta totalmente o modelo de serialization programação que foi usado pelo BinaryFormatter
. Todos os tipos que já estão marcados como [Serializable]
ou implementam ISerializable
podem ser serializados com DataContractSerializer
. Onde está a captura? Os tipos conhecidos devem ser especificados antecipadamente. Você precisa conhecê-los e ser capaz de obter o Type
, mesmo para tipos privados.
Não é necessário especificar as 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 suportados, consulte Tipos suportados pelo serializador de contrato de dados.
A confiança parcial é um recurso do .NET Framework que não foi portado para o .NET (Core). Se seu código é executado no .NET Framework e usa esse recurso, leia sobre as limitações que podem se aplicar a esse cenário.
Migração passo a passo
- Encontre todos os usos do
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 nenhum pacote, pois
DataContractSerializer
faz parte das bibliotecas principais do .NET. - Encontre todos os tipos que estão sendo serializados com
BinaryFormatter
o . Você não precisa modificar nenhum deles, mas pode ser necessário listá-los viaknownTypes
argumento doDataContractSerializer
construtor. - Substitua o uso de
BinaryFormatter
porDataContractSerializer
.
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});