【问题标题】:How can I deserialize the following xml?如何反序列化以下 xml?
【发布时间】:2012-09-04 12:15:46
【问题描述】:

我想在一个类中反序列化以下xml(具有特定属性):

<test1>
    <field1>0</field1>
    <field2>1</field2>
    <field3>2</field3>
</test1>
<test2>
    <field4>0</field4>
    <field5>1</field5>
    <field6>2</field6>
</test2>
<test3>
    <field7>0</field7>
    <field8>1</field8>
    <field9>2</field9>
</test3>

我编写的类如下:

    [Serializable]
    public class Result
    {
        [XmlElement("test1")]
        public Test1 T1{ get; set; }

        [XmlElement("test2")]
        public Test2 T2 { get; set; }

        [XmlElement("test3")]
        public Test3 T3 { get; set; }

    }

    [Serializable]
    public class Test1
    {
        [XmlElement("Field1")]
        public Test1 Field1{ get; set; }

        [XmlElement("Field2")]
        public Test2 Field2{ get; set; }

        [XmlElement("Field3")]
        public Test3 Field3 { get; set; }

    }
....

不幸的是,我在反序列化时收到以下错误:

输入 xmlns='' 不是预期的。

感谢您的帮助。

亲切的问候,亲

【问题讨论】:

  • 您的 xml 没有 root 元素
  • 是的,我知道 - 这就是挑战 ;-)
  • 您的 xml 必须有一个名为 Result 的根元素
  • 如果您从无法控制的服务中接收 XML,为什么不简单地将 XML 读取到流中,然后预先添加和附加 节点,然后将 XML 反序列化为字符串?跨度>
  • @pro 挑战?!!!您的 xml 无效,因此您无法对其进行反序列化

标签: c# .net xml serialization


【解决方案1】:

在 XML 周围添加一个 &lt;Result&gt;...&lt;/Result&gt; 元素。如果它们丢失,请预先添加并附加它们。如果存在不同的根元素,请将 [XmlRoot("name")] 元素添加到 Result 类。

解决 XML 序列化问题的最简单方法是填充一个对象,然后使用 XmlSerializer.Serialize() 对其进行序列化并查看生成的 XML。

【讨论】:

  • 我无法从网络服务中获取它们。
  • @pro 在生成的 Web 服务 XML 中会有一些根元素。将其设为类的名称或使用 [XmlRoot("name")] 属性。如果没有,请手动附加并预先添加根元素。我已经相应地更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多