Heim >Backend-Entwicklung >C++ >Wie kann ich Objekte mit privaten Membern in C# serialisieren?
Serialisieren von Objekten mit privaten Mitgliedern
Beim Versuch, ein Objekt mit privaten Eigenschaften zu serialisieren, können Entwickler auf Schwierigkeiten mit dem standardmäßigen XMLSerializer stoßen erfordert öffentlichen Zugriff auf alle serialisierten Eigenschaften. Dieses Problem wird in der Frage veranschaulicht, bei der ein Objekt mit einer privaten Id-Eigenschaft aufgrund seiner schreibgeschützten Natur nicht serialisiert werden kann.
Lösung des Problems
Um Objekte zu serialisieren mit Für private Mitglieder kann der DataContractSerializer verwendet werden. Im Gegensatz zum XMLSerializer erfordert es keinen öffentlichen Zugriff und basiert stattdessen auf Datenverträgen, die mithilfe von Attributen erstellt werden. Hier ist ein Beispiel mit DataContractSerializer:
[DataContract] class MyObject { public MyObject(Guid id) { this.id = id; } [DataMember(Name="Id")] private Guid id; public Guid Id { get {return id;}} }
Durch Hinzufügen des DataContract-Attributs zur Klasse und des DataMember-Attributs zur privaten Id-Eigenschaft können wir den DataContractSerializer anweisen, seine Serialisierung zu handhaben.
var ser = new DataContractSerializer(typeof(MyObject)); var obj = new MyObject(Guid.NewGuid()); using(XmlWriter xw = XmlWriter.Create(Console.Out)) { ser.WriteObject(xw, obj); }
Dieser Ansatz ermöglicht die Serialisierung von Objekten mit privaten Eigenschaften, ohne deren Kapselung zu beeinträchtigen. Es ist wichtig zu beachten, dass der DataContractSerializer keine XmlAttributes unterstützt und stattdessen XmlElements bevorzugt.
Alternativ sollten Sie für eine detailliertere Kontrolle über den Serialisierungsprozess die Implementierung der IXmlSerializable-Schnittstelle in Betracht ziehen. Durch die Bereitstellung benutzerdefinierter XML-Serialisierungs- und Deserialisierungsmethoden kann mit dem XMLSerializer eine größere Flexibilität erreicht werden.
Das obige ist der detaillierte Inhalt vonWie kann ich Objekte mit privaten Membern in C# serialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!