Fornecer métodos de desserialização campos opcionais
TypeName |
ProvideDeserializationMethodsForOptionalFields |
CheckId |
CA2239 |
Category (Categoria) |
Microsoft.uso |
Quebrando alterar |
Não separável |
Causa
Um tipo tem um campo é marcado com o System.Runtime.Serialization.OptionalFieldAttribute atributo e o tipo não fornece de-serialização métodos de manipulação de eventos.
Descrição da regra
The OptionalFieldAttribute atributo não tem efeito na serialização; um campo marcado com o atributo é serializado. No entanto, o campo é ignorado de-serialização e mantém o valor padrão associado ao seu tipo.De-serialização manipuladores de eventos devem ser declarado como conjunto o campo durante de-serialização processo.
Como corrigir violações
Para corrigir uma violação dessa regra, adicione de-serialização métodos para o tipo de manipulação de eventos.
Quando suprimir avisos
É seguro eliminar um aviso essa regra se o campo deve ser ignorado durante de-serialização processo.
Exemplo
O exemplo a seguir mostra um tipo com um campo opcional e o evento de desserialização métodos manipuladores.
Imports System
Imports System.Reflection
Imports System.Runtime.Serialization
<Assembly: AssemblyVersionAttribute("2.0.0.0")>
Namespace UsageLibrary
<SerializableAttribute> _
Public Class SerializationEventHandlers
<OptionalFieldAttribute(VersionAdded := 2)> _
Dim optionalField As Integer = 5
<OnDeserializingAttribute> _
Private Sub OnDeserializing(context As StreamingContext)
optionalField = 5
End Sub
<OnDeserializedAttribute> _
Private Sub OnDeserialized(context As StreamingContext)
' Set optionalField if dependent on other deserialized values.
End Sub
End Class
End Namespace
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
Chamar métodos da classe base em tipos ISerializable
Implementar ISerializable corretamente
Implementar construtores de serialização
Implementar métodos de serialização corretamente
Marcar todos os campos não serializáveis