¿Cómo puedo evitar que el formateador binario serialice una propiedad implementada automáticamente? El atributo [NonSerialized] solo se puede usar con campos. Y el campo está oculto cuando se usan propiedades implementadas automáticamente.¿Cómo evitar que se serialicen las propiedades implementadas automáticamente?
Respuesta
No es compatible con las propiedades implementadas automáticamente. Debe usar un campo de respaldo y establecer el NonSerializedAttribute en él.
public class ClassWithNonSerializedProperty {
[NonSerialized]
private object _data; // Backing field of Property Data that is not serialized
public object Data{
get { return _data; }
set { _data = value; }
}
}
Si está serializando a Xml, puede usar el atributo XmlIgnore.
No estoy seguro de que pueda hacerlo. Este MSDN article on SerializableAttribute
sugiere que implementan ISerializable y controlar la serialización mismo:
Todos los campos públicos y privados de un tipo que están marcados por el SerializableAttribute son serializados por defecto, a menos que el tipo implementa la interfaz ISerializable para anular el proceso de serialización .
O aléjese de una propiedad de automóvil para ese campo específico.
// This works for the underlying delegate of the `event` add/remove mechanism.
[field:NonSerialized]
public event EventHandler SomethingHappened;
Pero no parece que para las propiedades implementadas automáticamente. Pensé que valía la pena mencionarlo porque es útil saber cuándo serializar un objeto con los suscriptores del evento adjuntos.
No es posible para las propiedades implementadas automáticamente. Considere lo siguiente:
Este comportamiento es "por diseño". La decisión en el momento en que se implementaron las auto-propiedades fue que trabajarían en el "caso común" que, entre otras cosas, no significa atributos en el campo generado. La idea detrás de eso es mantenerlos simples y no mutarlos lentamente en propiedades completas. Por lo tanto, si necesita utilizar el atributo NonSerialized, las propiedades completas son la manera.
La solución propuesta de la utilización de campo respaldo no serializado-no parece funcionar correctamente con .NET 4.0 (al menos en el caso de serialización XML). El campo de hecho no se serializa, pero la propiedad pública que lo usa se serializa y, por lo tanto, anula el objetivo. Usar XmlIgnore workaround ayuda en caso de serialización Xml. Descargo de responsabilidad: no verifiqué el comportamiento de serialización binaria.
Si está serializando a Json y usando el Json.NET serializer (que recomiendo mucho, ya que tiene mucho más que ofrecer que otros serializadores en el mercado), entonces puede lograr el resultado deseado en las propiedades usando [JsonIgnore]
.
No es necesario crear un campo.
lo que el código sería:
public class ClassName
{
[JsonIgnore]
public object IgnoreMe { get; set; }
public object DoNotIgnoreMe { get; set; }
}
- 1. Propiedades implementadas automáticamente en C#
- 2. ¿Alguna razón para usar las propiedades implementadas automáticamente sobre las propiedades implementadas manualmente?
- 3. Evitar que ciertos campos se serialicen
- 4. ¿Las propiedades implementadas automáticamente tienen un conjunto privado?
- 5. ¿Los atributos de compatibilidad de propiedades implementadas automáticamente?
- 6. Realizar un seguimiento de las llamadas a las propiedades implementadas automáticamente
- 7. ¿Cómo se crea propiedades implementadas automáticamente en el diseñador de la clase VS
- 8. ¿Cómo crear propiedades implementadas automáticamente al implementar una interfaz en una clase?
- 9. ¿Cómo evitar que se generen propiedades 'especificadas' en clientes WCF?
- 10. ¿Cómo evitar que Eclipse agregue paréntesis automáticamente?
- 11. Evitar que Eclipse doble automáticamente las instrucciones de importación
- 12. qué propiedades implementadas automáticamente deben definir tanto acceso get y set
- 13. NHibernate establece las propiedades automáticamente al guardar
- 14. evitar que MPMoviePlayerController se reproduzca automáticamente en iOS 4.2.1
- 15. propiedades @synthesized automáticamente en Xcode 4.4
- 16. ¿Cómo evitar que FxCop analice el código generado automáticamente?
- 17. ¿Cómo impido que las propiedades de enlace se actualicen?
- 18. Cómo evitar que jQuery .html() escape el atributo href automáticamente?
- 19. Cómo evitar que Visual Studio cree automáticamente archivos de solución
- 20. ¿Cómo evitar que Visual Studio cree la carpeta "Propiedades"?
- 21. ¿Cómo evitar que las imágenes/bloques se envuelvan?
- 22. ¿Cómo hacer que las propiedades sean privadas?
- 23. ¿Cómo se muestran automáticamente todas las propiedades de una clase y sus valores en una cadena?
- 24. ¿Cómo puedo verificar que las propiedades que unen los componentes no se "pierdan"?
- 25. Cómo evitar que el diseñador de Windows Forms genere asignaciones de valores predeterminadas para las propiedades?
- 26. Ordenar automáticamente ko.observableArray como las propiedades vinculadas cambian
- 27. cómo evitar que Sinatra se ejecute?
- 28. SBT: ¿cómo evitar que scala-library se agregue automáticamente a pom?
- 29. ¿Las vistas se actualizan automáticamente
- 30. ¿Completa las propiedades primitivas con datos aleatorios automáticamente?
o puede utilizar [field: NonSerialized] directamente en la propiedad. – profou