[英]Deserializing XML Response using RestSharp
我已经阅读了关于这个主题已经提出的各种问题,我仍然没有更接近解决我的问题。
我试图反序列化这个xml响应:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<SubmissionResult>
<Result>ACCEPTED</Result>
<SubmissionID>
<RefNo>77587-1425386500</RefNo>
<Submitted>9</Submitted>
<ValidNo>7</ValidNo>
<InvalidNo>2</InvalidNo>
<InvalidNo_1>08452782055</InvalidNo_1>
<InvalidNo_2>01234567890</InvalidNo_1>
<TextvID>77587-1425386500</TextvID>
</SubmissionID>
<Credits>999999</Credits>
</SubmissionResult>
使用这些类:
[XmlRoot ("SubmissionResult")]
public class SubmissionResult
{
[XmlElement ("Result")]
public string Result { get; set; }
public SubmissionID SubmissionID { get; set; }
[XmlElement("Credits")]
public int Credits { get; set; }
}
public class SubmissionID
{
[XmlElement("RefNo")]
public int RefNo { get; set; }
[XmlElement("Submitted")]
public int Submitted { get; set; }
[XmlElement("ValidNo")]
public int ValidNo { get; set; }
[XmlElement("TextVID")]
public string TextVID { get; set; }
}
但是我只返回null和0值,我认为这是默认值。
以下是获取结果并希望反序列化的代码:
try
{
var request = new RestRequest();
request.RequestFormat = DataFormat.Xml;
request.Resource = APIURL;
request.RootElement = "SubmissionResult";
SubmissionResult r = Execute<SubmissionResult>(request);
}
public static T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient();
client.BaseUrl = new Uri("https://www.textvertising.co.uk/_admin/api", UriKind.Absolute);
var response = client.Execute<T>(request);
return response.Data;
}
非常感谢您提供的任何帮助。
CS
我做了一些改动,可以使它工作:
可能是问题中的拼写错误,但我必须改变的是发布的XML无效:
<InvalidNo_2>01234567890</InvalidNo_1>
我知道您希望使用.NET XMLSerializer,因为您使用了XmlRoot和XmlElement注释,因此您必须覆盖RestSharp附带的默认注释,如下所示:
request.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer();
此外,我不得不删除RootElement设置,该设置与.NET序列化程序不能很好地匹配,因此删除了以下行:
request.RootElement = "SubmissionResult";
所以我的版本成了:
var request = new RestRequest();
request.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer();
request.RequestFormat = DataFormat.Xml;
// request.Resource = APIURL;
SubmissionResult r = Execute<SubmissionResult>(request);
最后我注意到RefNo在类中是整数,但返回的值不是(77587-1425386500)所以我把它作为一个字符串:
[XmlElement("RefNo")]
public string RefNo { get; set; }
我在mocky.io上创建了一个模拟响应,经过测试,看起来工作得很好:
public static T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient();
client.BaseUrl = new Uri("http://www.mocky.io/v2/56cd88660f00009800d61ff8", UriKind.Absolute);
var response = client.Execute<T>(request);
return response.Data;
}
使用Restsharp我通常采用不同的方法,但我主要使用JSON。 这是使用MVC web api吗?
我将创建一个类型IRestClient
的客户端,我将设置API网址和一些标题。 我会用的,
var response = client.Post<T>(DataFormat.Json, "admin/api", content);
if(response.Data != null)
//populate T object with data
如果你能提供一些你正在打电话的网络服务方法的更多信息..这将有助于谢谢:)祝你好运...
看看这个http://restsharp.org/老实说,我从来没有使用过RestClient.Execute<>
我自己,但这个链接应该有希望帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.