【问题标题】:Parse XML list to typed object using annotations使用注解将 XML 列表解析为类型化对象
【发布时间】:2013-08-21 20:47:50
【问题描述】:

我有这个返回 Web 服务的 xml:

<return>
<LuckNumber>
    <Number>00092</Number>
    <CodError>00</CodError>
    <Serie>019</Serie>
    <Number>00093</Number>
    <CodError>00</CodError>
    <Serie>019</Serie>
    <Number>00094</Number>
    <CodError>00</CodError>
    <Serie>019</Serie>
    <Number>00095</Number>
    <CodError>00</CodError>
    <Serie>019</Serie>
</LuckNumber>

如何使用注释将此 XML 解析为类型化对象?

我试过了,还是不行:

protected T ProccessResult<T>(string result) {
    XmlSerializer serializer = new XmlSerializer(typeof(T));

    using (StringReader reader = new StringReader(result))
    {
        var resultDeserialize = (T)(serializer.Deserialize(reader));

        return resultDeserialize;
    }
}
ProccessResult<List<GenerateNumberList>>(STRING_XML_ABOVE)

要解析的类:

[XmlRoot("LuckNumber")]
public class GenerateNumberResult
{
    [XmlElement("Number")]
    public string LuckNumber { get; set; }

    [XmlElement("CodError")]
    public string CodError{ get; set; }

    [XmlElement("Serie")]
    public string Serie { get; set; }
}

有人可以帮助我吗?谢谢!

【问题讨论】:

  • 你应该考虑改变你的 XML 结构。

标签: c# asp.net xml c#-4.0 asp.net-mvc-4


【解决方案1】:

XML 的根是“return”元素。添加一个包含您的列表的包装类:

[XmlRoot("return")]
public class ResultWrapper
{
    [XmlElement("LuckNumber")] 
    public List<GenerateNumberResult> numberList;
}

并得到结果:

ResultWrapper result = ProccessResult<ResultWrapper>(xml);

【讨论】:

    猜你喜欢
    • 2014-07-09
    • 2021-05-16
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多