我有一个继承自集合的类,特别是List<>我列出了下面的课程。我使用DataContractSerializer将对象序列化为XML时遇到的问题是我在对象中添加的其他字段未被序列化程序序列化。
这是班级:
[CollectionDataContract(Name = "ServiceEvents", Namespace = "")]
public class ServiceEventList : List<ServiceEvent>
{
[DataMember]
public long StaleDate { get; set; }
[DataMember]
public long ExpirationDate { get; set; }
}
当我序列化对象并写入磁盘时,这是输出(注意缺少StaleDate和ExpirationDate)。
<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对象嵌入到类中。如果社区确认我的方法不起作用,我宁愿只扩展List但不会浪费更多时间。提前感谢您的建议。
答案 0 :(得分:2)
根据这篇文章:
http://social.msdn.microsoft.com/Forums/eu/wcf/thread/57eb195a-43a9-47fe-8b1a-a9d23feb2df2
问题确实是您从集合类型继承 - 在这种情况下,DataContractSerializer仅序列化其项目,但不序列化任何额外属性。