我正在尝试通过在我的应用程序中使用RestSharp来理解REST。
这是我的客户端返回的一些JSON:
{
"result" : {
"object_type" : "session",
"user_id" : "FEE3CBD4-5D35-11E3-A42A-606A40E381E5",
"object_name" : "Session",
"id" : "2F2968B6-5D37-11E3-89F4-5D6A40E381E5"
}
}
这是我的类对象:
public class TGCResult : IDeserializer
{
public string object_type {get; set;}
public string user_id { get; set; }
public string object_name { get; set; }
public string id { get; set; }
public TGCResult()
{
}
public override string ToString()
{
return "object_type = " + object_type + "\nuser_id = " + user_id + "\nobject_name = " + object_name + "\nid = " + id;
}
}
这是我正在检索JSON并尝试反序列化的代码:
var client = new RestClient("https://www.xxxxxxxxx.com");
var request = new RestRequest("/api/session", Method.POST);
request.AddParameter("username", "JSventoraGD");
request.AddParameter("password", "xxxxxxxxxxxxxxxx");
request.AddParameter("api_key_id", "xxxxxxxxxxxxxxxxxxx");
request.RequestFormat = DataFormat.Json;
var asyncHandle = client.ExecuteAsync<TGCResult>(request, response =>
{
TxtTest.Text = response.Data.ToString();
});
asyncHandle.Abort();
执行此操作时,我可以看到数据正确地返回到我的应用程序,但我的响应中的数据始终具有NULL值。有关为什么会发生这种情况的任何想法?我是否应该根据内容手动反序列化JSON?我在网上看到的样本与我的设置非常相似,我很遗憾...非常感谢任何帮助!
答案 0 :(得分:1)
尝试添加
request.RootElement = "result";
我花了几个小时试图获得一个简单的GET请求来解析除null之外的任何东西,设置RootElement帮助了我。有点惊讶我需要它,因为你在类型代码中设置了几个其他地方类型。
答案 1 :(得分:1)
var asyncHandle=client.ExecuteAsync(request,response=>{
String res=response.Content;
T obj = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(res);
});
答案 2 :(得分:0)
尝试像这样使用
var asyncHandle = client.ExecuteAsync(request, response =>
{
var json = response.Content;
// deserialize to TGCResult
});
这对我来说很好用
答案 3 :(得分:0)
您似乎需要将另一个类作为数据类型。
public class TGCResultContainer
{
public TGCResult result { get; set; }
}
此外,您的TGCResult类不需要实现IDeserializer。