[英]How I deserialize a dynamic json property with RestSharp in C#?
我有一個具有以下結構的Web服務(我無法編輯):
/用戶
{
"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屬性鏈接。 我怎樣才能做到這一點?
我首先要說一點都不優雅:
您可以使用獲取原始的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
將保存您的姓名列表。 這是丑陋的,不靈活的,我不建議這樣做。
更好地堅持聰明的繼承和自定義類。 它的可讀性更高,您的響應對象可能不會全部只有一個屬性,對嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.