簡體   English   中英

為什么我不能在同一個類上使用WCF DataContract和ISerializable?

[英]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

該線程接受的答案:

  1. [DataContract][Serializable]可以一起使用。

  2. DataContractSerializer了解它們。 如果類型用兩者標記,則需要[DataContract]的投影

  3. 以下是WCF中有關數據傳輸和序列化的文檔,它們提供了有關序列化程序和已知類型的大量詳細信息: 數據傳輸和序列化

我知道這已經很晚了,但如果有人讀到這個,我們就有類似的問題了。 我們將DataContract保留為WCF序列化的解決方案很好,然后當我們序列化到SQL Server會話時,我們將對象序列化為JSON並將其寫入會話。

我遇到了與wcf中的實體框架pocos序列化相同的問題。 沒有什么工作,當我嘗試從成員中刪除虛擬標簽時我就要放棄了。 突然間它開始工作了。 試一試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM