2010-12-15 1 views
6

У меня есть класс Node что-то вроде этого:C#: XML сериализации узлов с циклическими ссылками

class Node { 
    IEnumerable<Node> inputs; 
} 

Какой поясню определяет простой график. Я хочу сериализовать свой график в форме, удобной для человека, поэтому обычно я бы сказал, что xml - это путь. Но XML не был составлен с учетом циклических зависимостей :)

Итак - что было бы лучшим способом для сериализации моего графика?

Я могу придумать несколько способов:

  • канаву XML, создать свой собственный формат.
  • использование XML, помечать каждый узел с уникальным идентификатором, магазин соединения-листы отдельно от узлов и решить после загрузки

Но я думаю, что другие люди должны были иметь такую ​​же проблему, прежде чем, так что там могут быть некоторые лучшие варианты. Кто-нибудь знает прочный подход?

ответ

3

Для xml я бы пошел с подходом id (с изменением модели DTO, так что она не циклическая).

Отметьте, что DataContractSerializer может автоматически поддерживать циклические объектные графы, передавая true для опции preserveObjectReferences в перегруженных конструкторах; это будет не так просто, как вывод XmlSerializer, но он все равно будет читабельным.

1

Если вы переключитесь на WCF DataContractSerializer, вы можете сохранить ссылки на объект (в 3.5 SP 1 и более поздних версий)

[DataContract(IsReference=true)] 

Sowmy имеет хорошую подправить here