最近,我正在使用RestSharp来使用我的Restful资源。并期望在服务器和客户端之间与JSon进行数据交换。下面是我的C#代码。
var client = new RestSharp.RestClient();
var request = new RestRequest(sUrl,Method.POST);
request.RequestFormat = DataFormat.Json;
request.Timeout = TIME_OUT_MILLISECONTS ;
request.AddHeader("Content-Type", "application/json");
request.AddBody(new { appID = sAppId, loginName = sUserName, password=sPassword });
var response = client.Execute(request);
string s=response.Content;//It is always XML format.结果不是我所期望的(Json数据格式),尽管我已经设置了RequestFormat Json并添加了Http头Content-Type。因此,我决定使用.Net反射器来了解RestClient.Execute方法中发生了什么。这是该方法的代码。
public RestClient()
{
...
this.AddHandler("application/json", new JsonDeserializer());
this.AddHandler("application/xml", new XmlDeserializer());
this.AddHandler("text/json", new JsonDeserializer());
this.AddHandler("text/x-json", new JsonDeserializer());
this.AddHandler("text/javascript", new JsonDeserializer());
this.AddHandler("text/xml", new XmlDeserializer());
this.AddHandler("*", new XmlDeserializer());
...
}我对此有一些疑问:
Content-Type。构建请求是正确的吗?我认为这可能就是为什么Response.Content总是XML的原因。HttpWebRequest。这么做有什么意义吗?谢谢。祝你今天愉快。
发布于 2012-08-24 20:48:43
RestSharp将根据响应的内容类型使用正确的处理程序。这就是那些AddHandler正在做的事情;它将RestClient配置为在响应中接受某些内容类型,并将这些类型映射到反序列化器。通常,您希望为json内容类型设置一个接受头,通知服务器在响应中发送json。
request.AddHeader("Accept", "application/json")当然,这假设您正在访问的服务器被配置为使用json响应。
https://stackoverflow.com/questions/12091023
复制相似问题