1

我有一个从集合继承的类,特别是 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 但如果社区确认我的方法行不通,我不会在上面浪费更多时间。提前感谢您的建议。

4

1 回答 1

3

根据这篇文章:

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

问题确实是您从集合类型继承 - 在这种情况下 DataContractSerializer 仅序列化其项目,而不是任何额外的属性。

于 2012-11-23T07:51:12.730 回答