繁体   English   中英

使用嵌套列表解析xml

[英]Parse xml with nested lists

我正在尝试解析对象中的xml文件

这是我的名为Changelog.xml的xml文件

<?xml version="1.0" encoding="utf-8" ?>
<Changelog>
  <Releases>
    <Release>
      <Version>1507</Version>
      <Date>22-11-2013</Date>
      <Changes>
        <Change>Change1</Change>
        <Change>Change2</Change>
        <Change>Change3</Change>
        <Change>Change4</Change>
      </Changes>
    </Release>
    <Release>
      <Version>1506</Version>
      <Date>20-11-2013</Date>
      <Changes>
        <Change>Change1</Change>
      </Changes>
    </Release>
  </Releases>
</Changelog>

这是我想要将xml强制转换为我的Changelog对象

[XmlRoot()]
public class Changelog
{
    private List<Release> releases;

    public List<Release> Releases
    {
        get { return releases; }
        set { releases = value; }
    }
}

public class Release
{
    private string version;
    private string date;
    private List<ChangeItem> changes;

    [XmlElement]
    public string Version
    {
        get { return version; }
        set { version = value; }
    }

    [XmlElement]
    public string Date
    {
        get { return date; }
        set { date = value; }
    }

    [XmlElement]
    public List<ChangeItem> Changes
    {
        get { return changes; }
        set { changes = value; }
    }
}

public class ChangeItem
{
    private string change;

    [XmlElement]
    public string Change
    {
        get { return change; }
        set { change = value; }
    }
}

我在这里阅读文件

XmlSerializer serializer = new XmlSerializer(typeof(Changelog));
Changelog changelog = (Changelog)serializer.Deserialize(new StreamReader(@"changelog.xml"));
Releases = changelog.Releases;

foreach (Release release in Releases)
{
    string version = release.Version;
    string date = release.Date;
    List<ChangeItem> changes = release.Changes; // Has only 1 item
}

问题是更改列表中只有一个对象,尽管我期望1507版本中有4个对象。

我究竟做错了什么?

您有使用XmlElement属性修饰的ChangeItem.Change属性。 这意味着它成为另一个元素。

因此xml需要看起来不同。

要使其工作,请使用[XmlText]属性标记属性。

此外,您的Release.Changes需要使用XmlArrayXmlArrayItem属性进行修饰。

[XmlRoot]
public class Changelog
{
    private List releases;

    public List Releases
    {
        get { return releases; }
        set { releases = value; }
    }
}

public class Release
{
    private string version;
    private string date;
    private List changes;

    [XmlElement]
    public string Version
    {
        get { return version; }
        set { version = value; }
    }

    [XmlElement]
    public string Date
    {
        get { return date; }
        set { date = value; }
    }

    [XmlArray("Changes")] [XmlArrayItem("Change")]
    public List Changes
    {
        get { return changes; }
        set { changes = value; }
    }

}

public class ChangeItem
{
    private string change;

    [XmlText]
    public string Change
    {
        get { return change; }
        set { change = value; }
    }
}

我粗略标出了我的变化。

更改

[XmlElement]
public List<ChangeItem> Changes
{
    get { return changes; }
    set { changes = value; }
}

[XmlArray("Changes")]
public List<ChangeItem> Changes
{
    get { return changes; }
    set { changes = value; }
}

暂无
暂无

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

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