使用CollectionDataContactAttribute序列化其他字段

时间:2012-06-26 22:56:20

标签: c# .net xamarin.ios datacontractserializer datamember

我有一个继承自集合的类,特别是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但不会浪费更多时间。提前感谢您的建议。

1 个答案:

答案 0 :(得分:2)

根据这篇文章:

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

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