Ich habe einen seltsamen Fall dieses Serialisierungsproblems - das wurde oft auf dieser Seite gefragt und ich habe ein paar dieser Fragen durchgelaufen und habe die üblichen Dinge vergeblich versucht:Typ xxxx nicht zu verwenden xmlinclude oder soapinclude
- hinzufügen [XmlInclude], um die Klasse zu werfen die Fehler
- entfernen Namespaces
- einen anderen Namespace
jede Klasse hinzufügen weiter zu erklären, ich habe eine vereinfachte vorgesehen ver sion meines Codes unten. Im Wesentlichen benutze ich ein Objekt WebServiceHost
, um einen RESTful-Dienst auszuführen, und einer meiner Endpunkte gibt ein als XML serialisiertes Objekt zurück (ich habe das Objekt mit den Attributen [DataContract]
und [DataMember]
annotiert). Dieses Objekt enthält eine (here), wobei der Wert als object
eingegeben wurde. Ich glaube, das ist, warum es fehlschlägt:
- funktioniert gut, wenn der Wert zugewiesen ist ein primitiver
- Wenn ich ein benutzerdefiniertes Objekt mit dem KV Paar V zuweisen, erhalte ich die unerwartete Art Ausnahme wahrscheinlich, weil die Serializer nicht weiß, wie das Objekt serilaize/irgendeine Art von Problem Namensräume
Offensichtlich bin ich nicht in der Lage Object.cs mit [XmlInclude]
zu annotieren und weil es ist ein Dienst, und ich bin nicht ich selbst Serialisierung ich etwas nicht verwendet, kann wie
new Serializer(typeof(...), new Type[] { ... }}
Irgendeine Idee, was ich tun kann? Ich habe darüber nachgedacht, den dict-Wert nicht als Objekt einzugeben, sondern eher konkreter, aber das Problem ist, dass dieser Wert Primitive oder Cusotm-Typen annehmen kann. Einiger Code zu erklären, die oben:
Edit: der Code unten aktualisiert, um es deutlicher
[DataContract]
public class ResponseObject
{
[DataMember(Name = "data")]
public SerializableDictionary<string, object> Data { get;set; }
public ResponseObject()
{
Data = new SerializableDictionary<string, object>();
}
}
...
var d1 = new ResponseObject();
d1.Data.Add("some key", "some value"); //WORKS AND SERIALIZES PERFECLTY
var d2 = new ResponseObject();
d2.Data.Add("some other key", new SomeOtherObjecT());
var d3 = new ResponseObject();
d3.Data.Add("another key", d2); //THIS THROWS THE UNEXPECTED TYPE ERROR WHEN SEIRLAIZING SomeOtherObject
Edit: Der Fehler in SerializableDictionary geworfen wird, wo er versucht, ein Objekt zu serialisieren Typ ResponseObject. Die beiden sind in getrennten Projekten - wenn das wichtig ist?
Brilliantes Zeug, vielen Dank. Funktioniert gut. – clicky