[英]Why can't I use WCF DataContract and ISerializable on the same class?
我有一個類,我需要能夠序列化到SQLServer會話變量並通過WCF服務可用。 我已將其聲明如下
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:Type'BarProxybcb100e8617f40ceaa832fe4bb94533c'不能是ISerializable並且具有DataContractAttribute屬性。”
如果我取出Serializable屬性,WCF服務可以工作,但是當對象無法序列化為session時。 如果我從類Bar中刪除DataContract屬性,則WCF服務無法說明
輸入“BarProxy3bb05a31167f4ba492909ec941a54533”,數據合同名稱為“BarProxy3bb05a31167f4ba492909ec941a54533: http : //schemas.datacontract.org/2004/07/ ”。 將任何靜態未知的類型添加到已知類型列表中 - 例如,通過使用KnownTypeAttribute屬性或將它們添加到傳遞給DataContractSerializer的已知類型列表中
我已經嘗試將一個KnownType屬性添加到foo類
[KnownType(typeof(Bar))]
但我仍然得到同樣的錯誤。
任何人都可以幫我解決這個問題嗎?
非常感謝
戴夫
MSDN上的這個問題可能會有所幫助: DataContract與Serializable 。
該線程接受的答案:
[DataContract]
和[Serializable]
可以一起使用。DataContractSerializer了解它們。 如果類型用兩者標記,則需要
[DataContract]
的投影以下是WCF中有關數據傳輸和序列化的文檔,它們提供了有關序列化程序和已知類型的大量詳細信息: 數據傳輸和序列化
我知道這已經很晚了,但如果有人讀到這個,我們就有類似的問題了。 我們將DataContract保留為WCF序列化的解決方案很好,然后當我們序列化到SQL Server會話時,我們將對象序列化為JSON並將其寫入會話。
我遇到了與wcf中的實體框架pocos序列化相同的問題。 沒有什么工作,當我嘗試從成員中刪除虛擬標簽時我就要放棄了。 突然間它開始工作了。 試一試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.