我有一個類,我需要能夠序列化爲一個SQLServer會話變量,並通過WCF服務可用。我已經聲明如下爲什麼我不能在同一個類上使用WCF DataContract和ISerializable?
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
}
但是,當我嘗試調用此服務時,我在跟蹤日誌中得到以下錯誤。
「System.Runtime.Serialization.InvalidDataContractException: 類型 'BarProxybcb100e8617f40ceaa832fe4bb94533c' 不能ISerializable的和有 DataContractAttribute屬性。」
如果我拿出Serializable屬性,WCF服務工作,但是當對象不能序列化到會話。如果我刪除從Bar類的DataContract屬性,WCF服務失敗時說
類型 「BarProxy3bb05a31167f4ba492909ec941a54533」 數據合同名稱 「BarProxy3bb05a31167f4ba492909ec941a54533:http://schemas.datacontract.org/2004/07/」預計不會 。添加不 靜態已知的已知 類型列表中的任何類型 - 例如,通過使用 KnownTypeAttribute屬性或者 將其添加到我試着將傳遞給DataContractSerializer的
已知類型 列表一個KnownType屬性到foo類
[KnownType(typeof(Bar))]
但是我仍然得到相同的錯誤。
任何人都可以幫我解決這個問題嗎?
非常感謝
戴夫
謝謝,我現在就讀一讀。 – Dave 2010-03-17 10:38:55
謝謝 - 最後,我所做的是製作我的課程副本,並將其返回到整個服務中。 – Dave 2010-03-17 14:59:31
會很高興有實際的答案在這裏,而不是一個鏈接,因爲論壇目前正在維護... – 2011-12-02 16:27:58