NonSerialized by Auto-Property nicht möglich
-
[Serializable] class Testobjekt { [NonSerialized] int X { get; set; } }
Fehlermeldung:
Attribute 'NonSerialized' is not valid on this declaration type. It is only valid on 'field' declarations.
Warum ist das so? Ich versteh ja, warum man Properties nicht serialisieren kann. Weil es letztendlich Funktionen sind. Aber das hier ist doch ein Auto-Property. Das heißt, hinter dem steht implizit eine Variable. Warum kann ich das also nicht mit NonSerialized kennzeichnen? Muss ich jetzt wirklich wieder den ätzenden Weg gehen:
[Serializable] class Testobjekt { [NonSerialized] int _X; int X { get { return _X; } set { _X = value; } } }
-
Klar kann man Properties serialisieren? Genau genommen serialisiert man auch die Properties und nicht das Field was dahinter steht.
// Restbeitrag wiederspricht der Fehlermeldung
-
GGG1 schrieb:
Aber das hier ist doch ein Auto-Property. Das heißt, hinter dem steht implizit eine Variable.
Der Name dieser Variablen ist aber nicht bekannt.
-
inflames2k schrieb:
Klar kann man Properties serialisieren? Genau genommen serialisiert man auch die Properties und nicht das Field was dahinter steht.
// Restbeitrag wiederspricht der Fehlermeldung
Umgekehrt wird ein Schuh draus. Man serialisiert das Feld, nicht die Zugriffsfunktion...
Beim Auto-Property gibt es ja nach wie vor eine Backend-Variable auf die man aber keinen direkten Zugriff mehr hat.
-
witte schrieb:
GGG1 schrieb:
Aber das hier ist doch ein Auto-Property. Das heißt, hinter dem steht implizit eine Variable.
Der Name dieser Variablen ist aber nicht bekannt.
Genau das ist ja die Ironie: Wenn die Klasse serialisierbar ist, wird das Ding bei der Serialisierung automatisch mitgenommen. Es von der Serialisierung ausschließen ist dagegen nicht möglich.