反序列化响应

3
我正在使用RestRequest进行POST请求到Web服务。响应以JSON格式返回,但是我在response.Content中得到的是ASCII码,而Data为null。代码如下:

        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为空,而Content是{"uid":"1234"}

jLoginResponse被声明为

[DataContract]
public class jLoginResponse
{
    public string uid { get; set; }
}

但是它没有像应该自动反序列化。

1个回答

1

这个类应该有用DataMember标记的成员,就像这样:

[DataContract]
public class jLoginResponse
{
    [DataMember]
    public string uid { get; set; }
}

不应该这样,RestSharp不使用这些占位符。问题在于服务器将JSON作为文本而不是application/json进行发布。 - Marin
RestSharp使用JSON.net进行JSON序列化,而JSON.net可以使用属性(占位符),如果将其设置为“显式序列化”,它甚至有自己的JsonProperty,例如...但我很高兴问题已经解决! - Pedro Lamas
那么如果我将其设置为显式,我可以使用[DataMember Name="..."]并且它会正确地评估它吗? - Marin
@Marin,确切地说,请在此处查看更多信息:http://james.newtonking.com/projects/json/help/SerializationAttributes.html - Pedro Lamas
3
如果您今天正在阅读此内容,最新版本的RestSharp不再使用JSON.net。相反,它使用了一个内置的序列化器,该序列化器无法读取DataMember修饰符。 - Lucas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接