Warum kann ich nicht mit WCF DataContract-und ISerializable auf die gleiche Klasse?
Habe ich eine Klasse, die ich brauche, um in der Lage sein serialisiert werden, um eine SQL Server-session-variable und werden über einen WCF-Service. Ich habe erklärt es wie folgt
namespace MyNM
{
[Serializable]
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]
public class Foo : IEntity, ISafeCopy<Foo>
{
[DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual string a { get; set; }
DataMember(Order = 2)]
public virtual Bar c { get; set; }
/* ISafeCopy implementation */
}
[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy<Bar>
{
#region Implementation of IEntity
DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual Baz y { get; set; }
#endregion
/* ISafeCopy implementation*/
}
[Serializable]
[DataContract]
public enum Baz
{
[EnumMember(Value = "one")]
one,
[EnumMember(Value = "two")]
two,
[EnumMember(Value = "three")]
three
}
Aber wenn ich versuche und rufen Sie diesen service, bekomme ich die folgende Fehlermeldung in der trace-log.
"- System.- Laufzeit.Serialisierung.InvalidDataContractException:
Geben
'BarProxybcb100e8617f40ceaa832fe4bb94533c'
kann nicht sein, ISerializable und haben
Datacontractattribute aktivieren Attribut."
Wenn ich mit dem Serializable-Attribut der WCF-Dienst arbeiten, aber wenn das Objekt nicht serialisiert werden, um session. Wenn ich entfernen Sie das DataContract-Attribut aus der Klasse Bar, die WCF-Dienst kann nicht sagen
Geben
'BarProxy3bb05a31167f4ba492909ec941a54533'
mit Daten-Vertrag name
'BarProxy3bb05a31167f4ba492909ec941a54533:http://schemas.datacontract.org/2004/07/'
ist nicht zu erwarten. Fügen Sie alle Arten nicht
bekannt ist statisch in der Liste der bekannten
Arten - zum Beispiel, indem der
KnownTypeAttribute-Attribut oder durch
hinzufügen zu der Liste der bekannten Typen
übergeben DataContractSerializer
Ich habe versucht, das hinzufügen einer KnownType-Attribut auf die Klasse "foo"
[KnownType(typeof(Bar))]
Aber ich bekomme immer noch den gleichen Fehler.
Kann mir jemand helfen mit diesem?
Vielen Dank
Dave
InformationsquelleAutor der Frage Dave | 2010-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage auf der MSDN-Website könnte helfen: DataContract versus Serializable.
Akzeptierte Antwort aus diesem thread:
InformationsquelleAutor der Antwort Anders Abel
Ich weiß, das ist sehr spät, aber falls jemand dies liest, wir hatten ein ähnliches Problem. Unsere Lösung zum verlassen des DataContract-wie so WCF serialisiert in Ordnung, und dann, wenn wir, serialisiert das SQL-Server-Sitzung, wir werden serialisiert das Objekt zu JSON und schrieb, dass zu der Sitzung.
InformationsquelleAutor der Antwort jeff.eynon
Ich lief in das gleiche problem mit der Serialisierung für das entity framework pocos über wcf. Nichts war arbeiten und ich wollte schon aufgeben, als ich versuchte, entfernen die virtuelle tags, die von den Mitgliedern. Plötzlich begann es zu arbeiten. Probieren.
InformationsquelleAutor der Antwort Allen