RestSharp で次の返された XML データを解析するのに苦労しています。
<?xml version="1.0" encoding="UTF-8"?>
<TICKETANYWHERE>
<COUPON VER="1.0">
<RESPONSE>
<TEMPLATELIST>
<TEMPLATE ID="000000001">
<NAME>Some name</NAME>
</TEMPLATE>
<TEMPLATE ID="000000001">
<NAME>Some other name</NAME>
</TEMPLATE>
</TEMPLATELIST>
</RESPONSE>
</COUPON>
</TICKETANYWHERE>
これは API から返されるため、この XML を変更する方法はありません。XML ファイルをモデル化するために、次のクラスを作成しました。
public class Template
{
public string Id { get; set; }
public string Name { get; set; }
}
public class TemplateList : List<Template>
{}
public class Response
{
public TemplateList Templates { get; set; }
}
public class Coupon
{
public decimal Ver { get; set; }
public Response Response { get; set; }
}
public class TicketAnywhere
{
public Coupon Coupon { get; set; }
}
そして、次のユニットテストを作成しました(に触発されました)
var d = new XmlDeserializer();
var response = new RestSharp.RestResponse();
var XML = "<TICKETANYWHERE><COUPON VER=\"1.0\"><RESPONSE><TEMPLATELIST><TEMPLATE ID=\"00000001\"><NAME>Some name</NAME></TEMPLATE></TEMPLATELIST></RESPONSE></COUPON></TICKETANYWHERE>";
response.Content = XML;
var r = d.Deserialize<TicketAnywhere>(response);
ただし、r.Coupon は NULL です。ここで何が間違っていますか?
更新: 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));
}
これは再び失敗します。ただし、クラス名を Template => TEMPLATE から変更すると、すべて機能するようです。