2012-12-11 77 views
1

我敢肯定,我不是第一个谁问这个问题,但我没有发现我的答案在SO和谷歌...WCF和自定义集合系列化

我有以下自定义收藏:

[Serializable] 
public class BaseCollection<T>: ICollection<T> 
{ 
} 

[CollectionDataContract] 
[Serializable] 
ProductsCollection : BaseCollection<Product> 
{ 
    [DataMember] 
    public int CategoryId {get;set;} 
} 

现在,我使用WCF转让ProductsCollection实例......问题是,WCF不正确地传递我的自定义属性类别编号。它始终为0(int的缺省值)。

http://msdn.microsoft.com/en-us/library/aa347850.aspx他们说CollectionDataContract应该解决它,集合将被序列化到我的特定集合,而不是ArrayOfProduct。

难道我失去了一些东西?

如果不可能DataContract序列化,是有可能写出某种MyCustomContract串行对我的具体类,将serialiaze /根据需要反序列化我的收藏?

感谢

回答

2

DataContractSerializer(这是WCF默认)仅串行收集的物品,但没有额外的属性。

请参见本answer的解决方法。

+0

嗯...这意味着我必须建立我的“收藏”,并非来自继承ICollectionOfT有没有别的解决办法?是否有可能为我的特定类编写某种MyCustomContract序列化器,以便根据需要序列化/反序列化我的集合? –

+0

你也可以使用'XmlSerializer',但看起来它也不好。 – metalheart

+0

是的,XmlSerializer不是一个选项。 –