2010-03-17 26 views
10

我有一個類,我需要能夠序列化爲一個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))] 

但是我仍然得到相同的錯誤。

任何人都可以幫我解決這個問題嗎?

非常感謝

戴夫

回答

8

MSDN上這個問題可能會有所幫助:DataContract versus Serializable

從該線程接受的答案:

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

  2. DataContractSerializer理解它們。如果類型是標有兩者,將採取的 [DataContract]

  3. 在這裏,投影是其上串行器提供了很多細節上在WCF數據傳輸和序列化的文檔和已知類型:Data Transfer and Serialization

+0

謝謝,我現在就讀一讀。 – Dave 2010-03-17 10:38:55

+0

謝謝 - 最後,我所做的是製作我的課程副本,並將其返回到整個服務中。 – Dave 2010-03-17 14:59:31

+2

會很高興有實際的答案在這裏,而不是一個鏈接,因爲論壇目前正在維護... – 2011-12-02 16:27:58

0

我遇到了同樣的問題,通過wcf實體框架pocos的序列化。沒有任何工作,我試圖從成員身上移除虛擬標籤時即將放棄。突然它開始工作。試試看。

1

我知道這是很晚,但如果有人讀這個,我們有類似的問題。我們的解決方案是保持DataContract的狀態,WCF序列化好,然後當我們序列化到SQL Server會話時,我們將對象序列化爲JSON並將其寫入會話。

相關問題