Objekt XmlSerialization mit geschützten Eigenschaftensettern

8

Hier ist mein Objekt

%Vor%

Wenn ich versuche, dies zu xml zu serialisieren, erhalte ich eine Fehlermeldung "Die Eigenschaft oder der Indexer PersistentObject.ID kann in diesem Kontext nicht verwendet werden, weil auf den Set-Accessor nicht zugegriffen werden kann". Wenn der Setter nicht existiert, funktioniert es gut. Ich möchte diese ID als serialisiert behalten ohne eine hacktastische Lösung, die eine von [XmlIgnore ()] auf ID beinhaltet. Ich würde es vorziehen, wenn ich nur den Setzer [XmlIgnore ()] hinzufügen könnte, aber der Compiler beschwert sich. Hat jemand eine gute Lösung?

    
Trent 17.11.2009, 20:14
quelle

2 Antworten

20

Leider nein. XmlSerializer hat einige Dinge, die ... irritierend sind. Dies ist einer von ihnen. Optionen:

  • benutze DataContractSerializer (was protected etc unterstützt, aber nicht bietet volle xml Kontrolle)
  • mit [XmlIgnore] kommentieren - nichts falsch daran
  • implementieren IXmlSerializable - harte Arbeit und sehr leicht falsch zu verstehen
  • Entfernen Sie den Setter und verwenden Sie eine separate Methode protected , um den Wert
  • festzulegen
  • Verwenden Sie den Konstruktor XmlSerializer , mit dem Sie alles zur Laufzeit angeben können. viel Arbeit / Wartung, und Sie müssen den Serializer manuell zwischenspeichern (andernfalls erstellt er viele dynamische Baugruppen)
Marc Gravell 17.11.2009, 20:16
quelle
8

Auch wenn Ihre Frage nicht direkt beantwortet wird, beachten Sie, dass Sie Eigenschaften mit einem internal Setter serialisieren können. Dazu müssen Sie die XML-Serialisierungsassembly mit Sgen.exe vorgenerieren und diese Assembly mit dem InternalsVisibleTo -Attribut als "Freund" deklarieren:

%Vor%     
Thomas Levesque 17.11.2009 20:22
quelle

Tags und Links