Сериализация дополнительных полей с помощью CollectionDataContactAttribute
У меня есть класс, который наследует от коллекции, в частности List<>, и я перечислил класс ниже. Проблема, с которой я сталкиваюсь при сериализации объекта в XML с использованием DataContractSerializer, заключается в том, что дополнительные поля, которые я добавил в объект, не сериализуются сериализатором.
Вот класс:
[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 в класс. Я бы предпочел просто расширить список, но не буду тратить на него больше времени, если сообщество подтвердит, что мой подход не сработает. Заранее спасибо за совет.
1 ответ
Согласно этому посту:
http://social.msdn.microsoft.com/Forums/eu/wcf/thread/57eb195a-43a9-47fe-8b1a-a9d23feb2df2
проблема действительно в том, что вы наследуете от типа коллекции - в этом случае DataContractSerializer сериализует только свои элементы, но не какие-либо дополнительные свойства.