繁体   English   中英

将复杂的XML反序列化为C#对象

[英]Deserialize complex XML to C# object

我有这种格式的XML-

<Areas>
  <Area>
    <Property Name="Test11">a1</Property>
    <Property Name="Test12">a2</Property>
    <Property Name="Test13">a3</Property>
    <Property Name="Test14">a4</Property>
    <Property Name="Test15">a5</Property>
  </Area>
  <Area>
    <Property Name="Test21">b1</Property>
    <Property Name="Test22">b2</Property>
    <Property Name="Test23">b3</Property>
    <Property Name="Test24">b4</Property>
    <Property Name="Test25">b5</Property>
  </Area>
</Areas>

我使用Microsoft提供的xsd.exe生成了此类-

[Serializable()]
    public partial class Areas
    {
        [XmlArrayItem("Property", typeof(AreasAreaProperty))]
        public AreasAreaProperty[][] Area { get; set; }
    }

    [Serializable()]
    public partial class AreasAreaProperty
    {
        [XmlAttribute()]
        public string Name { get; set; }

        [XmlText()]
        public string Value { get; set; }
    }

反序列化的代码是-

private void Deserialize()
        {
            XmlSerializer xs = new XmlSerializer(typeof(Areas));
            FileStream fs = new FileStream("XMLFile1.xml", FileMode.Open);
            XmlReader xr = new XmlTextReader(fs);
            Areas a = (Areas)xs.Deserialize(xr);
            fs.Close();
        }

但是在反序列化时,我遇到了此错误- 无法将类型'AreasAreaProperty []'转换为'AreasAreaProperty'我在创建XMLSerializer对象时遇到了此错误。

如何解决这个问题? 提前致谢..

我想我以前看过。 XSD.exe并不完美,因此您需要对结果进行一些修改。 在下面的代码中,在具有[] []的最后一行上,删除[]之一,使其为“ public AreasAreaProperty [] Area ...”。

[Serializable()]
public partial class Areas
{
    [XmlArrayItem("Property", typeof(AreasAreaProperty))]
    public AreasAreaProperty[][] Area { get; set; }

过去我也遇到过类似的麻烦,请看一下这些问题的答案:

如果您了解架构,则应尝试将其添加到xsd中,而不要将所有内容留给xsd.exe工具。

Deserialize()方法的第四行不应该是

    Areas a = (Areas)xs.Deserialize(xr); 

代替

    Area a = (Area)xs.Deserialize(xr); 

因为您的根元素是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM