【问题标题】:How to serialize/deserialize xml when multiple elements have one child?当多个元素有一个孩子时如何序列化/反序列化xml?
【发布时间】:2012-01-30 10:58:06
【问题描述】:

我有一个必须反序列化的 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();

【问题讨论】:

  • 你能发布执行反序列化的代码吗?

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


【解决方案1】:

序列化/反序列化用于写入和读取对象或对象层次结构。状态。所以你需要让所有节点都完全支持序列化。

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

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

【讨论】:

  • 我确实相信 LINQ for XML 将是我的最佳方法,因为我只是从 xml 文件中读取并实例化对象,而不是将类序列化为 xml 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2020-07-26
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多