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