如何使用 RestSharp 解析 JSON

本文关键字:JSON 解析 RestSharp 何使用 | 更新日期: 2024-09-23 03:52:11

var client = new RestClient("http://10.0.2.2:50670/api");
var request = new RestRequest("Inventory", Method.GET);
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
// execute the request to return a list of InventoryItem
RestResponse<JavaList<InventoryItem>> response = (RestResponse<JavaList<InventoryItem>>)client.Execute<JavaList<InventoryItem>>(request);

返回的内容是一个 JSON 字符串,一个对象数组。以下是它的简短摘录:

[{"Id":1,"Upc":"1234567890","Quantity":100,"Created":"2012-01-01T00:00:00","Category":"Tequila","TransactionType":"Audit","MetaData":"PATRON 750ML"},{"Id":2,"Upc":"2345678901","Quantity":110,"Created":"2012-01-01T00:00:00","Category":"Whiskey","TransactionType":"Audit","MetaData":"JACK DANIELS 750ML"},{"Id":3,"Upc":"3456789012","Quantity":150,"Created":"2012-01-01T00:00:00","Category":"Vodka","TransactionType":"Audit","MetaData":"ABSOLUT 750ml"}]

错误消息:

由于对象的当前状态,操作无效

这是怎么回事?我的InventoryItem与 JSON 字符串中的每个对象具有相同的属性。我错过了一步吗?

如何使用 RestSharp 解析 JSON

我怀疑RestSharp中使用的SimpleJson不能反序列化为JavaList。

首先,我会尝试反序列化为:

List<InventoryItem>

如果做不到这一点,我推荐ServiceStack.Text - 。网络最快的JSON库;并执行以下操作:

var response = client.Execute(request);
var thingYouWant = JsonSerializer.DeserializeFromString<List<InventoryItem>>(response.Content);

这实际上是我自己做的。

编辑(感谢评论员(:在较新的版本中,现在将是:

var deserializer = new JsonDeserializer();
deserializer.Deserialize<List<InventoryItem>>(response);

使用自动魔法铸造失败,我在紧要关头使用它:

var rc = new RestClient("https://api-ssl.bitly.com");
var rr = new RestRequest("/v3/link/clicks?access_token={access_token}&link={bitlyUrl}", Method.GET);
rr.AddUrlSegment("bitlyUrl", bitlyUrl);
rr.AddUrlSegment("access_token", BityAccessToken);
var response = rc.Execute(rr);
dynamic json = Newtonsoft.Json.Linq.JObject.Parse(response.Content);
var clicks = Convert.ToInt32(json.data.link_clicks.Value);