Сериализация дополнительных полей с помощью 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 сериализует только свои элементы, но не какие-либо дополнительные свойства.

Другие вопросы по тегам