Construtores não públicos sem parâmetros não usados para desserialização
Para consistência em todos os TFMs (Moniker da Estrutura de Destino) com suporte, construtores não públicos e sem parâmetros não são mais usados para desserialização com JsonSerializer, por padrão.
Descrição das alterações
Os pacotes NuGet autônomos do System.Text.Json que dão suporte ao .NET Standard 2.0 e superiores, ou seja, as versões 4.6.0 a 4.7.2, comportam-se de forma inconsistente com o comportamento interno no .NET Core 3.0 e 3.1. No .NET Core 3.x, construtores internos e privados podem ser usados para desserialização. Nos pacotes autônomos, construtores não públicos não são permitidos e um MissingMethodException é lançado se não for definido nenhum construtor público sem parâmetros.
A partir do pacote NuGet 5.0.0 do System.Text.Json e do .NET 5, o comportamento é consistente entre o pacote NuGet e as APIs internas. Construtores não públicos, incluindo construtores sem parâmetros, são ignorados pelo serializador por padrão. O serializador usa um dos seguintes construtores para desserialização:
- Construtor público anotado com JsonConstructorAttribute.
- Construtor público sem parâmetros.
- Construtor público parametrizado (se for o único construtor público presente).
Se nenhum desses construtores estiver disponível, um NotSupportedException será gerado se você tentar desserializar o tipo.
Versão introduzida
5,0
Motivo da alteração
- Para impor um comportamento consistente entre todos os TFMs (Moniker da Estrutura de Destino) que System.Text.Json compila para (.NET Core 3.0 e versões posteriores e .NET Standard 2.0)
- Porque JsonSerializer não deve chamar a área de superfície não pública de um tipo, seja um construtor, uma propriedade ou um campo.
Ação recomendada
- Se você possui o tipo e ele é viável, torne o construtor sem parâmetros público.
- Caso contrário, implemente um JsonConverter<T> para o tipo e controle o comportamento de desserialização. Você pode chamar um construtor não público de uma implementação JsonConverter<T> se as regras de acessibilidade do C# para esse cenário permitirem.
APIs afetadas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de