DataContractSerializer
ruft beim Deserialisieren keine Konstruktoren auf oder ruft Feldinitialisierungen auf:
DataContractSerializer ruft meinen Konstruktor nicht auf?
Feldinitialisierung in C # -Klasse wird beim Deserialisieren nicht ausgeführt
Festlegen des Anfangswerts einer Eigenschaft bei der Verwendung DataContractSerializer
Ist es möglich, ein readonly
-Feld nach der Deserialisierung des Objekts zu initialisieren? Muss ich diese Sprachfunktion verlassen, um DataContractSerializer zu verwenden?
Ich bin mir nicht sicher, ob das eine gute Idee ist, aber Sie können den Wert eines readonly
-Feldes außerhalb des Konstruktors oder Feldinitialisierers durch Verwendung von Reflektion ändern.
Putting etwas wie:
%Vor%in Ihrem Deserialisierungsrückruf sollte funktionieren.
Ja, mit DataContractSerializer
können Sie ein readonly
-Feld serialisieren. Sie können sogar ein nicht- public
readonly
-Feld serialisieren.
Ich habe einen sauberen Weg gefunden, um das zu erreichen, wonach Sie suchen, ohne Ihr Design zu durchbrechen.
Wenn Sie diese Methode verwenden, stellen Sie sicher, dass Ihr Konstruktor aufgerufen und Ihr schreibgeschütztes Feld richtig eingestellt wird.
Sie müssen tatsächlich [DataMember]
markierte Felder einer DataModel-Klasse serialisieren und deserialisieren.
Dadurch wird verhindert, dass unbeabsichtigtes Verhalten auftritt, da DataContractSerializer den Konstruktor beim Deserialisieren nicht aufruft.
%Vor%Zum Deserialisieren und Serialisieren können Sie jetzt diese Klasse verwenden, um Ihre Werte zu halten.
Nach dem Laden können Sie ein neues Datenmodellobjekt erstellen und es an Ihre Klasse übergeben, deren Konstruktor aufgerufen werden muss.
%Vor%Nach dem Speichern können Sie die erforderlichen Daten aus Ihrer Klasse extrahieren, die das ReadOnly-Feld enthalten.
%Vor%Natürlich müssen Sie dem Konstruktor eine Überladung hinzufügen, und Sie müssen das Beispiel vielleicht ein wenig optimieren, aber ich denke, Sie haben das Bild.
Tags und Links c# initialization datacontractserializer