12
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"}]

エラーメッセージ:

オブジェクトの現在の状態のため、操作は無効です

ここで何が問題なのですか?MyInventoryItemには、JSON 文字列内の各オブジェクトと同じプロパティがあります。手順がありませんか?

4

2 に答える 2

9

RestSharp で使用される SimpleJson は、JavaList に逆シリアル化できないと思われます。

まず、次のようにデシリアライズしてみます。

List<InventoryItem>

それができない場合は、 .Net で最速の JSON ライブラリであるServiceStack.Textをお勧めします。そして、やります:

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

これは実際に私自身が行っていることです。

編集(コメンテーターに感謝します): 新しいバージョンでは、これは次のようになります:

var deserializer = new JsonDeserializer();
deserializer.Deserialize<List<InventoryItem>>(response);
于 2012-08-04T19:13:50.207 に答える
4

自動魔法のキャストで失敗したので、ピンチでこれを使用します。

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);
于 2013-08-26T22:23:26.387 に答える