Pregunta

[Serializable]
class MyClass
{
    [NonSerialized] int Foo { get; set; } // error
    [NonSerialized] int bar; // ok
}

¿Por qué esta anulado?

Yo sé de las soluciones tales como

  • implementar ISerializable
  • cambiar a XmlSerializer / XmlIgnore
  • cambiar a una propiedad implementado manualmente

La pregunta es específicamente ¿Por qué es [NonSerialized] no permitidos en Properies, sin embargo, admiten bajo campos.

¿Fue útil?

Solución

Las propiedades son en realidad métodos, que no son serializados por el proceso de serialización binaria. Es los campos que son serializados. Por lo que sólo tiene sentido para especificar NonSerialized en un campo.

Otros consejos

creo que este es un caso de control de grano fino que requiere más esfuerzo por su parte. En otras palabras, una propiedad automática tendrá por defecto un campo respaldo serializable. Si desea otra cosa que no sea el predeterminado, entonces no se puede utilizar una propiedad automática.

Yo había pensado que el uso de [field:NonSerialized] en contra de la fuerza de trabajo propiedad, pero no lo hace. La especificación de C # no llama explícitamente la serialización del campo de respaldo, pero sí incluye este (10.7.3):

The following example:
 public class Point {
    public int X { get; set; } // automatically implemented
    public int Y { get; set; } // automatically implemented
}
is equivalent to the following declaration:
public class Point {
    private int x;
    private int y;
    public int X { get { return x; } set { x = value; } }
    public int Y { get { return y; } set { y = value; } }
}

Así, el campo de soporte es serializable (el valor predeterminado).

Es posible que desee ver en IgnoreDataMemberAttribute si está utilizando WCF. Esto funciona en auto-propiedades.

Obras incluso si usted no marca todos los demás miembros como DataMember (que siempre me pareció ser un dolor) y la clase con DataContract

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top