繁体   English   中英

反序列化XML-如何反序列化嵌套列表?

[英]Deserialize XML - how do I deserialize nested lists?

我试图反序列化此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);
            }

您可以在Model以及Response内使用规格。 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之间的区别。

暂无
暂无

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

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