C# RestSharp反序列化深度嵌套的XML文档

C# RestSharp反序列化深度嵌套的XML文档,c#,restsharp,C#,Restsharp,我一直在努力让RestSharp解析以下返回的XML数据: 某个名字 其他名字 它是从API返回的,因此我无法更改此XML。我创建了以下类来建模XML文件: 公共类模板 { 公共字符串Id{get;set;} 公共字符串名称{get;set;} } 公共类模板列表:列表 {} 公众课堂反应 { 公共模板列表模板{get;set;} } 公务舱优惠券 { 公共十进制版本{get;set;} 公共响应{get;set;} } 公务舱票在哪里 { 公共优惠券{get;set;} } 然后我创建

我一直在努力让RestSharp解析以下返回的XML数据:


某个名字
其他名字
它是从API返回的,因此我无法更改此XML。我创建了以下类来建模XML文件:

公共类模板
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
}
公共类模板列表:列表
{}
公众课堂反应
{
公共模板列表模板{get;set;}
}
公务舱优惠券
{
公共十进制版本{get;set;}
公共响应{get;set;}
}
公务舱票在哪里
{
公共优惠券{get;set;}
}
然后我创建了以下unittest()

var d=新的XmlDeserializer();
var response=new RestSharp.restreponse();
var XML=“Some name”;
response.Content=XML;
var r=d.反序列化(响应);
然而,r.优惠券为空。我做错了什么

更新: 通过将XML和测试更改为以下内容,我试图将问题归结为最简单的形式:

    public class Template
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }

    public class TemplateList
    {
        public List<Template> Templates { get; set; }
    }

    [Test]
    public void AnotherTest()
    {
        var XML = @"<?xml version=""1.0"" encoding=""UTF-8""?>
        <TEMPLATELIST>
            <TEMPLATE ID=""00000001"">
                <NAME>Some name</NAME>
            </TEMPLATE>
            <TEMPLATE ID=""00000002"">
                <NAME>Some name</NAME>
            </TEMPLATE>
        </TEMPLATELIST>";

        var d = new XmlDeserializer();
        var response = new RestSharp.RestResponse();
        response.Content = XML;

        var r = d.Deserialize<TemplateList>(response);
        Assert.That(2, Is.EqualTo(r.Templates.Count));
    }
公共类模板
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
}
公共类样板画家
{
公共列表模板{get;set;}
}
[测试]
公共无效另一项测试()
{
var XML=@”
某个名字
某个名字
";
var d=新的XmlDeserializer();
var response=new RestSharp.restreponse();
response.Content=XML;
var r=d.反序列化(响应);
Assert.That(2,Is.EqualTo(r.Templates.Count));
}

这又失败了。但是,如果我将类名从Template=>Template更改,这一切似乎都能正常工作。

XML在反序列化过程中区分大小写。要快速解决这个问题,您可以尝试

XML = XML.Replace("COUPON", "Coupon");
每个元素名称的等

如果您将要处理许多不同的xml文件,那么找到一些可以很好地处理这些文件的方法是值得的


注意,您还可以将
模板
中的属性名称从
优惠券
更改为
优惠券

XML在反序列化过程中区分大小写。要快速解决这个问题,您可以尝试

XML = XML.Replace("COUPON", "Coupon");
每个元素名称的等

如果您将要处理许多不同的xml文件,那么找到一些可以很好地处理这些文件的方法是值得的


注意,您还可以将
模板中的物业名称从
优惠券
更改为
优惠券

,感谢您澄清了区分大小写的问题。请看我对这个问题的编辑。由于这是API返回的XML,我真的无法替换内容,但是,如果大写我的类名解决了问题,我担心这是他们的出路,尽管这很难看。谢谢你的帮助!!:)有一种方法可以使用
反序列化属性
来装饰您的c#类,但是我还没有实现这一点,所以还不能粘贴它作为替代答案。好的。但它实际上似乎可以将类和属性重命名为CAPS。我应该把它作为一个替代答案发布,还是应该把积分归你(你创建了一个替代答案)?好的,对不起,我重命名了类,而不是属性。我将补充这一点作为答案。您只需要重命名属性名,而不需要重命名类。这样至少你的代码对你的叫喊声会少一点。嗯,RestSharp似乎也在使用文本xml名称(模板)来解析类。如果CAPS中没有属性和类名,则单元测试失败。我想我不得不让我的代码对着我大喊大叫…谢谢你澄清了区分大小写的问题。请看我对这个问题的编辑。由于这是API返回的XML,我真的无法替换内容,但是,如果大写我的类名解决了问题,我担心这是他们的出路,尽管这很难看。谢谢你的帮助!!:)有一种方法可以使用
反序列化属性
来装饰您的c#类,但是我还没有实现这一点,所以还不能粘贴它作为替代答案。好的。但它实际上似乎可以将类和属性重命名为CAPS。我应该把它作为一个替代答案发布,还是应该把积分归你(你创建了一个替代答案)?好的,对不起,我重命名了类,而不是属性。我将补充这一点作为答案。您只需要重命名属性名,而不需要重命名类。这样至少你的代码对你的叫喊声会少一点。嗯,RestSharp似乎也在使用文本xml名称(模板)来解析类。如果CAPS中没有属性和类名,则单元测试失败。我想我得留下我的密码对着我大喊大叫。。。