2012-06-26 55 views
0

我有一个类继承了一个集合,特别是列表<>,并且列出了下面的类。我使用DataContractSerializer将对象序列化到XML时遇到的问题是我在对象中添加的其他字段没有被序列化器序列化。
这里是类:使用CollectionDataContactAttribute序列化其他字段


[CollectionDataContract(Name = "ServiceEvents", Namespace = "")] 
public class ServiceEventList : List<ServiceEvent> 
{ 
    [DataMember] 
    public long StaleDate { get; set; } 

    [DataMember] 
    public long ExpirationDate { get; set; } 
} 

当我序列化对象,并写入到磁盘,这里是输出(注意两者StaleDate和到期日期失踪)。


<ServiceEvents xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ServiceEvent><Date>2012-06-26T22:23:24.120817Z</Date><Description>A Service Event</Description><Id>634763462041210040</Id><Notes></Notes><Odometer>42</Odometer></ServiceEvent></ServiceEvents> 

下面是序列化对象的代码:

using (FileStream fs = new FileStream(path, FileMode.Create)) 
{ 
    //TODO: StaleDate is not serializing to disk 
    //TODO: ExpirationDate is not serializing to disk 
    DataContractSerializer ser = new DataContractSerializer(typeof(ServiceEventList)); 
    ser.WriteObject(fs, list); 
} 

我的下一个想法是去除继承结构,只是嵌入列表对象进级。如果社区确认我的方法无效,我宁愿只扩展List,但不会浪费更多时间。预先感谢您的建议。

回答

2

根据这个帖子:

http://social.msdn.microsoft.com/Forums/eu/wcf/thread/57eb195a-43a9-47fe-8b1a-a9d23feb2df2

问题确实是你从一个集合类型继承 - 在这种情况下,DataContractSerializer的序列化只是它的项目,但没有任何额外的属性。

+0

同意;感谢您链接到另一个线程。他们对“_WCF如何将收藏当作T [] _”的线材的解释有助于平息我的好奇心。我会将我的实现恢复为只包含List 集合作为类内的属性,而不是继承列表。 – benhorgen