Как сериализовать / десериализовать XML, когда у нескольких элементов есть один дочерний элемент? - PullRequest
0 голосов
/ 30 января 2012

У меня есть один 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();

1 Ответ

3 голосов
/ 30 января 2012

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

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

  • Вы можете использовать LINQ for XML для анализа файла и создания новых объектов.
  • Вы можете использовать XPath для выбора элементов node2 и создания новых объектов из итератора узла.
  • Вы можете реализовать IXmlSerializable и пропустить ненужные узлы в ReadXml и WriteXml.
...