簡體   English   中英

如何在C#中使用RestSharp反序列化動態json屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM