CA2239: Fornecer métodos de desserialização para campos opcionais
Item | Valor |
---|---|
RuleId | CA2239 |
Categoria | Microsoft.Usage |
Alteração da falha | Sem interrupção |
Causa
Um tipo tem um campo que foi marcado com o atributo System.Runtime.Serialization.OptionalFieldAttribute e não fornece métodos de tratamento de eventos de desserialização.
Descrição da regra
O atributo OptionalFieldAttribute não tem efeito na serialização; um campo marcado com o atributo é serializado. No entanto, o campo é ignorado na desserialização e mantém o valor padrão associado ao seu tipo. Os manipuladores de eventos de desserialização devem ser declarados para definir o campo durante o processo de desserialização.
Como corrigir violações
Para corrigir uma violação dessa regra, adicione métodos de tratamento de eventos de desserialização ao tipo.
Quando suprimir avisos
É seguro suprimir um aviso dessa regra quando o campo deve ser ignorado durante o processo de desserialização.
Exemplo
O exemplo a seguir mostra um tipo com um campo opcional e métodos de tratamento de eventos de desserialização.
using System;
using System.Reflection;
using System.Runtime.Serialization;
[assembly: AssemblyVersionAttribute("2.0.0.0")]
namespace UsageLibrary
{
[SerializableAttribute]
public class SerializationEventHandlers
{
[OptionalFieldAttribute(VersionAdded = 2)]
int optionalField = 5;
[OnDeserializingAttribute]
void OnDeserializing(StreamingContext context)
{
optionalField = 5;
}
[OnDeserializedAttribute]
void OnDeserialized(StreamingContext context)
{
// Set optionalField if dependent on other deserialized values.
}
}
}
Regras relacionadas
CA2236: Chamar métodos da classe base em tipos ISerializable
CA2240: Implementar ISerializable corretamente
CA2229: Implementar construtores de serialização
CA2238: Implementar métodos de serialização corretamente
CA2235: Marcar todos os campos não serializáveis
CA2237: Marcar tipos ISerializable com SerializableAttribute
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