反序列化响应
问题描述:
我正在使用RestRequest对Web服务进行POST。响应采用JSON格式,但我将其作为响应内容获取。作为ASCII的内容和数据为空。代码:反序列化响应
var request = new RestRequest(api, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddObject(data);
RestClient client = new RestClient("http://IP:PORT/proto");
client.ExecuteAsync<jLoginResponse>(request, (response) =>
{
var resource = response.Data;
});
这里response.Data是空的,内容是 { “UID”: “1234”}
jLoginResponse被声明为
[DataContract]
public class jLoginResponse
{
public string uid { get; set; }
}
,但它没有得到应该自动反序列化。
答
类应该有成员打上DataMember
,像这样:
[DataContract]
public class jLoginResponse
{
[DataMember]
public string uid { get; set; }
}
没有它不应该,RestSharp不使用此占位符。问题在于该服务器将json作为文本发布,而不是application/json。 – Marin 2012-03-29 18:51:18
RestSharp使用JSON.net进行JSON序列化,如果将JSON.net设置为“Explict Serialization”,它可以使用属性(占位符),甚至每个示例都有它自己的JsonProperty ...但我很高兴问题是解决了! – 2012-03-29 20:31:07
因此,如果我将它设置为显式,我可以使用[DataMember Name =“...”],它会正确评估它? – Marin 2012-03-30 12:06:43