[Serializable]
class MyClass
{
[NonSerialized] int Foo { get; set; } // error
[NonSerialized] int bar; // ok
}
¿Por qué no se permite?¿Por qué [NonSerialized] no funciona en las propiedades autoaplicadas?
que sé acerca de las soluciones tales como
- implementar ISerializable
- cambiar a XmlSerializer/XmlIgnore
- de cambiar a una propiedad implementado manualmente-
La pregunta es específicamente qué es [NonSerialized] no permitido en las propiedades, pero permitido en los campos.
propiedades no son meros métodos. Semánticamente son una combinación de métodos y un campo de respaldo implícito. Y todos los serializadores en existencia sí ven el campo de respaldo. Por lo tanto, tiene sentido controlar la serialización del campo de respaldo implícito a través de su propiedad. –
De hecho, en realidad son un par de métodos. Pero el campo de respaldo está implícito solo para las propiedades automáticas, y puede que no exista en absoluto para las propiedades normales. De todos modos, cuando se introdujo el atributo 'NonSerialized', las auto-propiedades no existían, por lo que no podrían haber tomado esa consideración en cuenta –
Ok, y si fueran a hacer que NonSerialized fuera válido para las propiedades * now *, tendrían para diferenciar entre auto-propiedades y propiedades normales en la enumeración AttributeTargets. Lo cual creo que no se puede hacer sin romper la compatibilidad. Aceptado. –