C# 使用CollectionDataContactAttribute序列化其他字段

C# 使用CollectionDataContactAttribute序列化其他字段,c#,.net,xamarin.ios,datacontractserializer,datamember,C#,.net,Xamarin.ios,Datacontractserializer,Datamember,我有一个从集合继承的类,特别是列表,我在下面列出了这个类。使用DataContractSerializer将对象序列化为XML时遇到的问题是,我在对象中添加的其他字段没有被序列化器序列化。 下面是课堂: 我的下一个想法是删除继承结构,只在类中嵌入一个列表对象。我更愿意扩展列表,但如果社区确认我的方法行不通,我就不会在上面浪费更多的时间。提前感谢您的建议。根据本帖: 问题确实是您从集合类型继承—在本例中,DataContractSerializer仅序列化其项,而不序列化任何额外的属性。同意;

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



我的下一个想法是删除继承结构,只在类中嵌入一个列表对象。我更愿意扩展列表,但如果社区确认我的方法行不通,我就不会在上面浪费更多的时间。提前感谢您的建议。

根据本帖:


问题确实是您从集合类型继承—在本例中,DataContractSerializer仅序列化其项,而不序列化任何额外的属性。

同意;感谢您链接到另一个线程。他们对“WCF如何将收藏视为等同于T[]的电线”的解释平息了我的好奇心。我将恢复我的实现,将列表集合作为属性包含在类中,而不是从列表继承。
[CollectionDataContract(Name = "ServiceEvents", Namespace = "")]
public class ServiceEventList : List<ServiceEvent> 
{
  [DataMember]
  public long StaleDate { get; set; }

  [DataMember]
  public long ExpirationDate { get; set; }
}
<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);
}