Festlegen des Anfangswerts einer Eigenschaft bei Verwendung von DataContractSerializer

7

Wenn ich eine Klasse mit DataContractSerializer serialisieren und später deserialisieren möchte, wie kann ich dann die Anfangswerte von Eigenschaften steuern, die nicht serialisiert wurden?

Betrachten Sie die Klasse Person unten. Der Datenvertrag ist so eingestellt, dass die Eigenschaften FirstName und LastName serialisiert werden, nicht jedoch die Eigenschaft IsNew . Ich möchte IsNew auf TRUE initialisieren, ob eine neue Person als neue Instanz instanziiert oder aus einer Datei deserialisiert wird.

Dies ist leicht über den Konstruktor möglich, aber wie ich es verstehe, ruft DataContractSerializer den Konstruktor nicht auf, da sie Parameter benötigen könnten.

%Vor%     
Eric Anastas 28.04.2010, 00:01
quelle

2 Antworten

10

Sie können einen Serialisierungsrückruf verwenden. Fügen Sie Ihrer Personenklasse die folgende Methode hinzu:

%Vor%

Eine weitere Option besteht darin, die Attribute [DataContract] und [DataMember] zu entfernen. In diesem Fall ruft DCSerializer Ihren Konstruktor bei der Deserialisierung auf.

    
alexdej 28.04.2010, 00:04
quelle
14

Tatsächlich ist es die richtige Vorgehensweise, das OnDeserializing-Attribut zu verwenden (beachten Sie das Suffix "ing"). Die mit diesem Attribut markierte Methode wird aufgerufen, bevor die Mitgliedswerte deserialisiert werden.

    
Pavel 19.05.2010 21:06
quelle