Я использую WCF DataContractSerializer для сериализации и десериализации большого графа объектов в моем приложении. Моя проблема в том, что если у меня есть коллекция, которая инициализируется в объявлении поля, DataContractSerializer не запускает эту инициализацию, и коллекция заканчивается нулем.
Например:
class Test
{
List<string> collection = new List<string>();
public List<string> Collection
{
get { return collection; }
}
}
После сериализации и десериализации этого класса коллекция будет иметь значение null вместо нового по умолчанию. Если я перенесу инициализацию в свойство get, все будет нормально.
Поскольку у меня довольно большой граф объектов, прохождение всех мест, где это происходит, занимает довольно много времени. Я бы предпочел, если бы был способ сделать это как-то автоматически.
Обновление: я использую WCF DataContractSerializer, поэтому я думаю, именно поэтому он не инициализирует коллекцию.
Может ли обычный XML Serializer обрабатывать рекурсивные ссылки, как у меня в моей сущности?
Обновление: Хорошо, теперь я застрял ... точнее говоря, сущности используются для NHibernate, поэтому у них есть DataContract / DataMember. Но затем я использую IList для свойств BelongsTo / HasMany, и XMLSerializer также не сериализует их, и без рекурсивных ссылок это тоже не пойдет.
Итак, если у нас есть класс, который использует IList и имеет рекурсивные ссылки, есть ли способ, которым я могу его сериализовать / десериализовать и при этом запускать конструкторы объектов по умолчанию?
Обновление: провел еще несколько тестов, похоже, что мне придётся придумать собственный гибрид, так как NH требует IList, который ограничивает меня DCS, и его тегом для проблем ...