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 に答える