Runtime: http: //schemas.datacontract.org/2004/07/System‘ist nicht zu erwarten
-
09-09-2019 - |
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 istJedes 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.
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.