【问题标题】:Deserialize XML - how do I deserialize nested lists?反序列化 XML - 如何反序列化嵌套列表?
【发布时间】:2015-06-17 14:38:56
【问题描述】:

我正在尝试反序列化这个 XML:

<Response>
<Make Name="Audi">
<Model Name="A7">
<Specs>
<Spec Identifier="330025">...</Spec>
<Spec Identifier="330026">...</Spec>
<Spec Identifier="330027">...</Spec>
<Spec Identifier="330028">...</Spec>
<Spec Identifier="330008">...</Spec>
<Spec Identifier="330038">...</Spec>
<Spec Identifier="330024">...</Spec>
<Spec Identifier="330019">...</Spec>
<Spec Identifier="330020">...</Spec>

我只对规格列表感兴趣,但似乎无法反序列化它。我尝试了以下方法:

类:

  [XmlRoot]
    public class Response
    {
        [XmlArray("Specs"), XmlArrayItem("Spec")]
        public List<Spec> Results { get; set; }

        //[XmlArray("Specs"), XmlArrayItem("Spec")]
        public List<Make> Make { get; set; } 
    }


    public class Spec
    {
        [XmlAttribute("YearProductionStarts")]
        public string YearProductionStarts { get; set; }
        [XmlAttribute("YearProductionEnd")]
        public string YearProductionEnd { get; set; }
    }

    public class Make
    {
        public List<Model> Model { get; set; }
    }

    public class Model
    {
        public List<Spec> Spec { get; set; }
    }

并用这种方法毫无乐趣地反序列化:

 //Deserialize responseXml to response object
            var xmLserializer = new XmlSerializer(typeof(ResponseGetSpec));

            using (var reader = new StringReader(responseXml))
            {
                return (ResponseGetSpec)xmLserializer.Deserialize(reader);
            }

【问题讨论】:

    标签: c# xml xml-deserialization


    【解决方案1】:

    您在 ModelResponse 中都有规范。您的 XML 设置方式将进入 Model

    您还需要所有其他项目的属性。

    从这样的开始

    [XmlRoot]
    public class Response
    {
        [XmlElement("Make")] // Use XmlElement to get multiple items without a containing XML tag
        public List<Make> Make { get; set; } 
    }
    
    
    public class Spec
    {
        [XmlAttribute("YearProductionStarts")]
        public string YearProductionStarts { get; set; }
        [XmlAttribute("YearProductionEnd")]
        public string YearProductionEnd { get; set; }
    }
    
    public class Make
    {
        [XmlElement("Model")]
        public List<Model> Model { get; set; }
    }
    
    public class Model
    {
        [XmlArray("Specs"), XmlArrayItem("Spec")]
        public List<Spec> Spec { get; set; }
    }
    

    如果这不起作用,请创建一个对象并将其序列化,然后查看该 XML 和您要使用的 XML 之间的差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      相关资源
      最近更新 更多