2010-05-03 69 views
0

我試圖通過WCF推送數據集合的一個子集供WCF使用 - 考慮分頁數據。因此,我希望這個館藏有一頁的價值數據以及總數的結果。我想通過創建一個擴展List的自定義對象,這應該是微不足道的。但是,我所做的每件事都會導致我的TotalNumber屬性變爲0.所有數據都被序列化/反序列化,但這個單個整數根本不會出現。無法序列化此列表<T>擴展

這裏是我失敗的第一次嘗試:

[Serializable] 
public class PartialList<T> : List<T> 
{ 
    public PartialList() 
    { 

    } 

    public PartialList(IEnumerable<T> collection) 
     : base(collection) 
    { 
    } 

    [DataMember] 
    public int UnpartialTotalCount { get; set; } 

這是我的失敗在完全相同的方式第二次嘗試:

[Serializable] 
public class PartialList<T> : List<T>, ISerializable 
{ 
    public PartialList() 
    { 

    } 

    public PartialList(IEnumerable<T> collection) 
     : base(collection) 
    { 
    } 

    [DataMember] 
    public int UnpartialTotalCount { get; set; } 

    protected PartialList(SerializationInfo info, StreamingContext context) 
    { 
     UnpartialTotalCount = info.GetInt32("UnpartialTotalCount"); 
    } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("UnpartialTotalCount", UnpartialTotalCount); 
    } 

} 

這是怎麼回事?在這裏

回答

0

對於WCF,您可能想要在類上使用[DataContract]屬性,而不是ISerializable接口。 WCF使用不同類型的序列化,並使用不同的約定來標記應該序列化的類和成員。 WCF可能支持[Serializable]或ISerializable,但我建議只使用[DataContract]/[DataMember]/etc。 WCF慣例。

+0

'[DataContract]'屬性導致運行時錯誤,說它使它成爲不正確的集合。確切的錯誤,但我已經嘗試過。 – Jaxidian 2010-05-03 23:26:07

2

只是如果任何人發現這個話題,<DataContract>不是有效的自定義集合類型。

您應該使用<CollectionDataContract>代替。It'sa類似的命名空間,具有同等的成員,但它能夠處理與自定義列表和字典有關更多信息,請參閱本文中的「自定義集合」: http://msdn.microsoft.com/en-us/library/aa347850.aspx