3 Stimmen

Erfordert die XML-Serialisierung, dass Eigenschaften gelesen und geschrieben werden können?

Ich teste die XML-Serialisierung in meiner Klasse, aber ich habe festgestellt, dass die ID-Nummer nicht gespeichert wird, wenn ich das Programm ausführe.

Also habe ich mich umgesehen und ein paar Dinge geändert, aber nichts hat funktioniert, dann habe ich gesehen, dass alle Felder außer ID sowohl get- als auch set-Eigenschaften hatten. Also fügte ich eine set; Eigenschaft zu meiner ID-Nummer hinzu und puff, es funktionierte. Die Frage ist, muss es set sein; und get; Funktion auf alle meine Eigenschaften für XML-Serialisierung zu arbeiten?

Ich möchte nicht, dass die ID-Nummer geändert wird, nachdem das Objekt erstellt wurde (sie wird automatisch generiert).

5voto

Jon Skeet Punkte 1325502

Ja, dies ist im Grunde eine Einschränkung der XML-Serialisierung. Von der XML-Serialisierungsdokumente :

Nur öffentliche Eigenschaften und Felder können serialisiert werden. Eigenschaften müssen einen öffentliche Accessoren (get und set Methoden). Wenn Sie Folgendes serialisieren müssen nicht-öffentliche Daten serialisieren müssen, verwenden Sie die BinaryFormatter-Klasse und nicht die XML Serialisierung.

Die XML-Serialisierung ist nicht so flexibel, wie man es sich wünschen würde.

1voto

Marc Gravell Punkte 970173

Beachten Sie, dass Sie, wenn Sie nicht-öffentliche Daten als xml serialisieren wollen, DataContractSerializer nützlich sein könnte. Es ist nicht so flexibel wie XmlSerializer (und Sie können keine Attribute angeben), aber es kann nicht-öffentliche Daten serialisieren:

[DataContract]
public class Person {
    [DataMember]
    private int id;

    public int Id {get {return id;}} // immutable

    public Person(int id) { this.id = id; }

    [DataMember]
    public string Name {get;set;} // mutable
}

Beachten Sie auch, dass Ihr Konstruktor nicht verwendet wird... oder sogar jede Konstruktor - er schummelt, indem er ein Objekt erstellt und die Daten anschließend einträgt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X