如何使用C#XML Serialization反序列化以下文件,其中root本身是IEnumerable?

时间:2013-02-01 05:51:24

标签: c# .net xml xml-serialization

<results>
    <result>
        <egov_ref_no>20121203001</egov_ref_no>
        <status>OK</status>
        <err_code>01</err_code>
    </result>
    <result>
        <egov_ref_no>20121203002</egov_ref_no>
        <status>OK</status>
        <err_code>02</err_code>
    </result>
    <result>
        <egov_ref_no>20121203003</egov_ref_no>
        <status>OK</status>
        <err_code>03</err_code>
    </result>
</results> 

上面的代码显示根节点已经是IEnumerable,在线示例中它们只是元素。

1 个答案:

答案 0 :(得分:4)

如果您有结果对象,则只需将XmlRootAttribute传入XmlSerializer构造函数即可。在这种情况下,它的“结果”

示例:

List<Result> results = new List<Result>();

XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Result>), new XmlRootAttribute("results"));

using (FileStream stream = new FileStream(@"C:\Test.xml", FileMode.Open))
{
    results = (List<Result>)xmlSerializer.Deserialize(stream);
}

我的结果对象:

[XmlType(TypeName = "result")]
public class Result
{
    [XmlElement(ElementName = "egov_ref_no")]
    public long EgovRefNo { get; set; }

    [XmlElement(ElementName = "status")]
    public string Status { get; set; }

    [XmlElement(ElementName = "err_code")]
    public int ErrorCode { get; set; }
}

这将返回List<Result>

enter image description here