Frage

Ok, so habe ich DataContractSerializer mit meinem Objektgraph arbeiten. Siehe meine früheren Anfragen für weitere Informationen.

Serialisierung / Derialization einer Baumstruktur

Der Deserializer hat kein know jeglicher Art, die diesen Vertrag zuordnet

Allerdings ist eine meiner Felder, _UserPropertyDefinitions wird definiert, wie unten dargestellt .. Es definiert eine Liste der benutzerdefinierten Eigenschaften, die diese Benutzer auf Objekte in der Datenstruktur hinzufügen können. Der String ist ein eindeutiger Schlüssel die Eigenschaft zu identifizieren und Art ist die Art der Immobilie, die wie Bool, Int, String etc etc ..

immer eine primitive Art ist

Jedes Objekt hat einen entsprechenden Wörterbuch (String key, Object value) Sammlung mit den Werten speichern es für eine der "Benutzereigenschaften"

gesetzt hat
[DataMember]
private Dictionary<string, Type> _UserPropertyDefinitions;

Mein Objektgraph serialisiert in Ordnung, wenn diese Eigenschaft eine leere Sammlung ist, noch einmal ich eine benutzerdefinierte Eigenschaft zu dieser Sammlung ich die folgenden Ausnahme erhalten, wenn sie mit DataContractSerializer serialisiert werden versuchen.

  

Typ 'System.RuntimeType' mit Daten   Vertragsnamen   ‚Runtime: http://schemas.datacontract.org/2004/07/System '   ist nicht zu erwarten. Fügen Sie keine Typen   statisch auf die Liste der bekannten bekannt   Typen - zum Beispiel durch die Verwendung von   Knowntype Attribut oder durch   sie in die Liste der bekannten Typen Hinzufügen   bestanden DataContractSerializer.

Wenn ich das Datamember-Attribut für dieses Feld zu entfernen die ich mit aus serialisiert / deserialisiert eine Ausnahme erhalten, aber natürlich verliere ich die Einstellungen, die ich in diesem Bereich erstellt haben.

War es hilfreich?

Lösung

Ich bin mir ziemlich sicher, dass Type wird sich sehr gut nicht serialisiert werden - und wohl es nicht in einem Datenvertrag gehören sowieso, da (die Implementierung spezifischer) es besiegt eines der wichtigsten Ziele einer Daten- Vertrag ...

Allerdings erwarte ich, dass der beste Ansatz, dass für eine Dictionary<string,string> zu tauschen wäre, die Type der AssemblyQualifiedName oder FullName verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top