CA2239: Proporcionar métodos de deserialización para campos opcionales
Elemento | Valor |
---|---|
RuleId | CA2239 |
Category | Microsoft.Usage |
Cambio importante | Poco problemático |
Causa
Un tipo tiene un campo que está marcado con el atributo System.Runtime.Serialization.OptionalFieldAttribute y el tipo no proporciona métodos de control de eventos de deserialización.
Descripción de la regla
El atributo OptionalFieldAttribute no tiene ningún efecto en la serialización; se serializa un campo marcado con el atributo. Sin embargo, el campo se omite en la deserialización y conserva el valor predeterminado asociado a su tipo. Los controladores de eventos de deserialización deben declararse para establecer el campo durante el proceso de deserialización.
Cómo corregir infracciones
Para corregir una infracción de esta regla, agregue métodos de control de eventos de deserialización al tipo.
Cuándo suprimir las advertencias
Es seguro suprimir una advertencia de esta regla si se debe omitir el campo durante el proceso de deserialización.
Ejemplo
En el ejemplo siguiente se muestra un tipo con un campo opcional y métodos de control de eventos de deserialización.
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.
}
}
}
Reglas relacionadas
CA2236: Llamar a métodos de clase base en tipos ISerializable
CA2240: Implementar ISerializable correctamente
CA2229: Implementar constructores de serialización
CA2238: Implementar métodos de serialización correctamente
CA2235: Marcar todos los campos no serializables
CA2237: Marcar los tipos ISerializable con SerializableAttribute
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de