How to parse JSON using RestSharp?

↘锁芯ラ 提交于 2020-07-18 04:03:52

问题


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);

The content returned is a JSON string, an array of objects. The following is a short excerpt of it:

[{"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"}]

The error message:

Operation is not valid due to the current state of the object

What is wrong here? My InventoryItem has the same properties as each object in the JSON string. Am I missing a step?


回答1:


I suspect that SimpleJson, used in RestSharp can't deserialise to a JavaList.

First I would try deserialising to a:

List<InventoryItem>

Failing that, I recommend ServiceStack.Text - .Net's fastest JSON library; and do:

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

This is actually what I do myself.

Edit (Thank you to commentators): In newer versions this would now be:

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



回答2:


Failing w/ auto-magic casting, I use this in a pinch:

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);


来源:https://stackoverflow.com/questions/11803485/how-to-parse-json-using-restsharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!