如何在多个元素有一个子元素时序列化/反序列化xml?

时间:2012-01-30 10:58:07

标签: c# xml xml-serialization .net-2.0

我有一个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 个答案:

答案 0 :(得分:3)

序列化/反序列化用于写入和读取对象或对象层次结构。州。因此,您需要让所有节点完全支持序列化。

但是如果您只是想读取xml并将其解析为对象,则不必使用序列化。

  • 您可以使用LINQ for XML来解析文件并创建新对象。
  • 您可以使用XPath选择node2元素并从节点迭代器创建新对象。
  • 您可以实现IXmlSerializable并跳过ReadXml和WriteXml上不需要的节点。