Domanda

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

Perché questo annullato?

Conosco le soluzioni alternative come ad esempio

  • attuazione ISerializable
  • passare a XmlSerializer / XmlIgnore
  • passare a una proprietà manualmente attuate

La domanda è specificamente perché è [NonSerialized] ha invalidato il properies, tuttavia ammessi sui campi.

È stato utile?

Soluzione

Proprietà sono in realtà i metodi, non vengono serializzati dal processo di serializzazione binaria. E 'i campi che vengono serializzati. Quindi ha senso solo per specificare NonSerialized su un campo.

Altri suggerimenti

Credo che questo sia un caso di controllo capillare che richiede più sforzo da parte vostra. In altre parole, una proprietà automatica per difetto avere un campo di supporto serializzabile. Se si desidera qualcosa di diverso da quello predefinito, quindi non è possibile utilizzare una proprietà automatica.

I aveva pensato che utilizzando [field:NonSerialized] contro il lavoro proprietà potrebbe, ma non è così. Il C # spec non esplicitamente richiamare il serializzabilità del campo di supporto, ma include questo (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; } }
}

Così, il campo di supporto è serializable (default).

Si consiglia di guardare a IgnoreDataMemberAttribute se si sta utilizzando WCF. Questo funziona su auto-proprietà.

funziona anche se non contrassegnate tutti gli altri membri come DataMember (che ho sempre trovato ad essere un dolore) e la classe con DataContract

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top