Ich habe ein einfaches Objekt mit einem propery (I mehr Eigenschaften, einfache ints und Streicher);WCF wird nicht meine Klasse serialisiert aber die DataContractSerializer scheinen glücklich, wenn nicht WCF
[DataMember]
public virtual IList<MailAddress> DistributionList { get; set; }
Ich las dieses Objekt mit NHibernate, in der Eigenschaft beeing vom Typ NHibernate.Collection.Generic.PersistentGenericList führt.
bekomme ich folgende Fehlermeldung, wenn an dem WCF-Log suchen;
Es gab einen Fehler beim Versuch Parameter http://tempuri.org/:StartReportDistributionResult serialisiert werden. Die Innerexception Nachricht
Typ ‚Miros.Models.MailAddress‘ mit Datenvertrag Name war ‚mailadresse: http://schemas.datacontract.org/2004/07/Miros.Models‘ ist nicht zu erwarten. Erwägen Sie die Verwendung eines DataContractResolver, wenn Sie DataContractSerializer verwenden, oder fügen Sie statisch bekannte Typen zur Liste bekannter Typen hinzu, z. B. indem Sie das KnownTypeAttribute-Attribut verwenden oder sie der Liste bekannter Typen hinzufügen, die an den Serializer übergeben werden. Weitere Informationen finden Sie unter InnerException.
Jetzt sollte dies anzeigen, dass etwas mit der Serialisierung nicht stimmt. Also habe ich aus dieser Frage Has anyone created a DataContract testing tool? Code hinzugefügt, der das Objekt über den DataContractSerializer testet. Dies funktioniert gut ...
Nun, wenn ich die Eigenschaft zu ändern;
myObject.DistributionList = myObject.DistributionList.ToList();
WCF ist glücklich. Was geht hier vor sich? Wie kann ich herausfinden, was das Problem ist?
Haben Sie MailAddress und seine Mitglieder auch mit DataContract/DataMember markiert? –
Ja, tat ich. Und es funktioniert durch die Testserialisierung und Deseralisierung. – Julius
Innere Ausnahme? Es ist * immer * besser, 'ToString' für das Ausnahmeobjekt einfach aufzurufen und das gesamte Ergebnis in Ihre Frage einzufügen. Haben Sie auch versucht, das KnownTypeAttribute auf die Klasse mit der Eigenschaft anzuwenden? Es kann ärgerlich sein, aber es könnte Ihr Problem lösen. – Will