Как сериализовать/десериализовать xml, когда у нескольких элементов есть один дочерний элемент?

У меня есть один XML-документ, который я должен десериализовать. Документ выглядит примерно так

<root>
  <node1>
    <node2>
      <child1>
        <infoNode1 attr="value"/>
                 .
                 .
                 .
      </child1>
      <child2>
         .
         .
      </child2> 
    </node2>
  </node1>
</root>

Только child1 содержит информацию. Сейчас я его десериализую так, что у меня есть отдельный класс для каждого узла, но мне нравится иметь только класс для node2, потому что там содержатся все данные.

Есть ли простой способ пропустить /root/node1? Должен ли я реализовать свою собственную десериализацию для этого?

Спасибо.

РЕДАКТИРОВАТЬ:

Код, который я использую для выполнения десериализации

string path = "file.xml";
RootClass projectDef = null;

XmlSerializer serializer = new XmlSerializer(typeof(RootClass));

StreamReader reader = new StreamReader(path);
projectDef = (RootClass)serializer.Deserialize(reader);
reader.Close();

person Adrian    schedule 30.01.2012    source источник
comment
Не могли бы вы опубликовать код, который выполняет десериализацию?   -  person Seb    schedule 30.01.2012


Ответы (1)


Сериализация/десериализация предназначена для записи и чтения объекта или иерархии объектов. государство. Поэтому вам нужно иметь все узлы для полной поддержки сериализации.

Но если вы просто хотите прочитать xml и разобрать его на объекты, вам не нужно использовать сериализацию.

  • Вы можете использовать LINQ для XML для анализа файла и создания новых объектов.
  • Вы можете использовать XPath для выбора элементов node2 и создания новых объектов из итератора узла.
  • Вы можете реализовать IXmlSerializable и пропустить нежелательные узлы в ReadXml и WriteXml.
person Huusom    schedule 30.01.2012
comment
Я действительно считаю, что LINQ для XML был бы лучшим подходом в моем случае, так как я только читаю из файла xml и создаю экземпляр объекта, а не сериализую класс в файл xml. - person Adrian; 30.01.2012