You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用RestSharp反序列化API返回的XML至对象?

解决XML反序列化为对象的问题

我看了你的XML内容和实体类代码,问题出在Sube类的特性标记上——你给Sube类加了[XmlRoot(ElementName = "Sube")],但XmlRoot特性是用来指定整个XML文档的根元素的,而Sube是嵌套在Sistemrent下的子元素,这个标记会干扰XmlSerializer的解析逻辑,导致反序列化失败。

修正后的实体类

把Sube类上的[XmlRoot]去掉,换成[XmlType](或者直接删除该特性也可以,因为默认会用类名匹配元素名),修正后的代码如下:

[XmlRoot(ElementName = "Sistemrent")]
public class Sistemrent
{
    [XmlElement(ElementName = "Sube")]
    public List<Sube> Sube { get; set; }
}

// 替换XmlRoot为XmlType,或者直接删除该特性
[XmlType(ElementName = "Sube")]
public class Sube
{
    [XmlElement(ElementName = "Sube_Kodu")]
    public string Sube_Kodu { get; set; }

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

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

    [XmlAttribute(AttributeName = "id")]
    public string Id { get; set; }
}

完整的反序列化代码示例

接下来用XmlSerializer来完成反序列化,这里提供一个可直接运行的实现:

using System;
using System.IO;
using System.Xml.Serialization;

public class XmlDeserializerHelper
{
    public static Sistemrent DeserializeXml(string xmlContent)
    {
        var serializer = new XmlSerializer(typeof(Sistemrent));
        using (var reader = new StringReader(xmlContent))
        {
            return (Sistemrent)serializer.Deserialize(reader);
        }
    }

    // 测试验证用例
    public static void Main()
    {
        string xmlContent = @"<Sistemrent> 
<Sube id=""1""> 
<Sube_Kodu>ABC</Sube_Kodu> 
<Sube_Ismi>AAA BBB</Sube_Ismi> 
<Kayit_ID>1</Kayit_ID> 
</Sube> 
<Sube id=""2""> 
<Sube_Kodu>BCD</Sube_Kodu> 
<Sube_Ismi>BBB CCC</Sube_Ismi> 
<Kayit_ID>1</Kayit_ID> 
</Sube> 
</Sistemrent>";

        var result = DeserializeXml(xmlContent);
        foreach (var sube in result.Sube)
        {
            Console.WriteLine($"ID: {sube.Id}, 代码: {sube.Sube_Kodu}, 名称: {sube.Sube_Ismi}");
        }
    }
}

验证结果

运行上面的测试代码,会输出:

ID: 1, 代码: ABC, 名称: AAA BBB
ID: 2, 代码: BCD, 名称: BBB CCC

说明反序列化已经成功完成。

额外注意事项

  • 确保所有属性的名称和XML中的元素/属性名称完全匹配(XML解析是大小写敏感的)
  • 如果你的XML带有命名空间,需要在XmlRoot和XmlElement特性中指定Namespace属性
  • 生产环境中建议添加异常处理,捕获InvalidOperationException等可能的反序列化异常

内容的提问来源于stack exchange,提问作者Hidayet Güngörür

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:19:43