Ausnahme während der Serialisierung - Typ mit Daten-Vertrag name ist nicht zu erwarten
Habe ich diese Klassen:
[DataContract]
class ClassA
{
[DataMember]
public Object Value; //and this can be of ClassB or some primitive type.
...
}
[DataContract]
class ClassB : IEnumerable<KeyValuePair<String, ClassA>>
{
[DataMember]
private Dictionary<String, ClassA> dictionary;
...
}
aber immer diese Ausnahme, wenn die Serialisierung statt:
Typ 'MyNamespace.ClassA' mit Daten-Vertrag name
'ClassA:http://schemas.datacontract.org/2004/07/MyNamespace' ist nicht
erwartet. Fügen Sie alle Arten nicht bekannt ist statisch in der Liste der bekannten
Arten - zum Beispiel, indem die KnownTypeAttribute-Attribut oder durch
hinzufügen zu der Liste der bekannten Typen übergeben
DataContractSerializer.
Ich das Gefühl, dass ich verwenden soll KnownType
Attribut, aber ich kann nicht herausfinden, wie, denn ich bin nicht der Besitz IEnumerable<T>
.
Kann jemand helfen? Danke.
InformationsquelleAutor Elvedin Hamzagic | 2015-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie Folgendes:
[KnownType(typeof(int))]
helfen???System.Int32
ist immer ein bekannter Typ ist.Ich fürchte, Sie haben beide Recht,teilweise. In der Tat
KnownType
fehlt es. Ich werde details in einer Antwort.InformationsquelleAutor Ashok Rathod
Habe ich schließlich bekommen es richtig. Die Lösung ist ganz einfach,
Value
aus der ersten Klasse ist der TypObject
, und das Serialisierungsprogramm haben, um zu wissen, welche Arten wird boxed in, dasObject
.So
ClassA
sollte erklärt werden:Diesem Dokument hier wirklich geholfen zu klären, was ist
KnownType
.int Value
, aber in der Tat, dass war einObject
, und das war der wichtigste Teil meiner Frage.InformationsquelleAutor Elvedin Hamzagic