コレクションから継承するクラス、具体的には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を拡張したいのですが、コミュニティが私のアプローチが機能しないことを確認した場合、それ以上の時間を無駄にすることはありません。アドバイスをよろしくお願いします。