我有一个具有以下结构的网络服务(我无法编辑):
/用户
{
"response" : {
"users": [{"name": "John"},{"name": "Jack"}]
},
"page" : { "current":1, "total":1}
}
/宠物
{
"response" : {
"pets": [{"name": "Fido"},{"name": "Tweety"}]
},
"page" : { "current":1, "total":1}
}
正如您可以在"响应"中看到属性名称财产变化。 如何使用RestSharp反序列化一般响应?我不想为每个资源编写一个Response类。
我编写了以下通用Response类
class RestResponse{
public ResponseBody response { get; set; }
public ResponsePage page { get; set; }
}
class ResponseBody {
public List<dynamic> resourceList { get; set; }
}
class ResponsePage {
public int current { get; set; }
public int total { get; set; }
}
class User { public string name {get; set;} }
class Pet { public string name {get; set;} }
当然,RestSharp无法将动态json属性与ResponseBody.list属性相关联。 我怎么能这样做?
答案 0 :(得分:4)
我开始说这根本不优雅:
您可以使用
获取原始JSON响应RestResponse response = client.Execute(request);
var jsonString = response.Content; // raw content as string
从那以后,您可以使用JSON.NET来查询它:
var jObject = JObject.Parse(jsonString);
// this could probably be written nicer, but you get the idea...
var resources = jObject ["response"]["users"].Select(t => t["name"]);
然后 resources
会保留您的姓名列表。这是丑陋的,不灵活的,我不推荐它。
更好地坚持使用聪明的继承和自定义类。它更具可读性,你的响应对象可能不会只有一个属性,对吗?