2016-04-07 1 views
2

私はRestSharp呼び出しからJSON戻り値を逆シリアル化しようとしています。RestSharpのAPI呼び出しからJSONの戻り値をオブジェクトの配列に逆シリアル化する方法はありますか?

これはC#コンソールアプリケーションです。ここに私のコードは、これまでです:

using System; 
using RestSharp; 
using RestSharp.Authenticators; 
using Newtonsoft.Json.Linq; 
using Newtonsoft.Json; 
using RestSharp.Deserializers; 
using System.Collections.Generic; 

namespace TwilioTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var client = new RestClient("https://api.twilio.com/2010-04-01"); 
      var request = new RestRequest("Accounts/{{Account Sid}}/Messages.json", Method.GET); 
      request.AddParameter("To", "{{phone number}}"); 
      request.AddParameter("From", "{{phone number}}"); 
      client.Authenticator = new HttpBasicAuthenticator("{{account sid}}", "{{auth token}}"); 
      var response = client.Execute(request); 
      var jsonResponse = JsonConvert.DeserializeObject(response.Content); 
      Console.WriteLine(jsonResponse); 
     } 
    } 
} 

応答が"to""from""body"、そして"status"などのキーを使用して、メッセージのJSON形式のリストです。

class Message 
{ 
    public string To { get; set; } 
    public string From { get; set; } 
    public string Body { get; set; } 
    public string Status { get; set; } 
} 

私は周りを探してきた。このようになりますMessageクラスで、

{ 
    "to": "{{phone number}}", 
    "from": "{{phone number}}", 
    "body": "Sent from your Twilio trial account - Message 1!", 
    "status": "delivered" 
}, 
{ 
    "to": "{{phone number}}", 
    "from": "{{phone number}}", 
    "body": "Sent from your Twilio trial account - Message 2", 
    "status": "delivered" 
}, 

私はMessageオブジェクトの配列にそれを有効にする:ここではそれがどのように見えるかのようなものですJSONをオブジェクトに変換する方法については、http://blog.atavisticsoftware.com/2014/02/using-restsharp-to-deserialize-json.htmlをご覧ください。ページの3番目の例は、私が望む行に沿っています。

私は、プログラムに変更を加え、今では、次のようになります。

class Program 
    { 
     static void Main(string[] args) 
     { 
      // same as above until this point 
      ... 
      var response = client.Execute(request); 
      JsonDeserializer deserial = new JsonDeserializer(); 
      var messageList = deserial.Deserialize<List<Message>>(response); 
      foreach (Message element in messageList) 
      { 
       Console.WriteLine("To: {0}", element.To); 
       Console.WriteLine("From: {0}", element.From); 
       Console.WriteLine("Body: {0}", element.Body); 

      } 
      Console.ReadLine(); 
     } 
    } 

私はプログラムを実行するときしかし、messageListは空です。 JSONレスポンスをオブジェクトのリストにするには何が欠けていますか? RestSharp Documentationはそれをかなり簡単に見せます。

答えて

2

私はRestSharpについて多くを知らないが、あなたがそのような応答内容の文字列を取得することができます:

var responseContent = client.Execute(request).Content; 

をそして、あなたのJSON文字列デシリアライズするJson.Netを使用します。私はこれを試してみた

JObject jsonResponse = JObject)JsonConvert.DeserializeObject(response.Content); 
var messageList = JsonConvert.DeserializeObject<List<Message>>(jsonResponse["messages"].ToString()‌​); 
+0

をresponseContentは '{" key1 ":" value1 "、" key2 ":" value2 "...}'のような文字列です。プログラムがDeserializeObject行にヒットすると、JsonSerializationExceptionが発生します。「型をJSON配列で正しく逆シリアル化する必要があるため、現在のJSONオブジェクトを型に逆シリアル化できません。私は、JSON文字列を配列に変換するためにオンラインで見つかったいくつかのことを試しましたが、エラーが続いています。正しくデシリアライズするには、JSONのすべてのキーについてメッセージクラスにプロパティが必要ですか? – jmk22

+0

jsonを投稿できますか? – Thomas

+0

私はそれを理解しました.Jsonの応答は多くのプロパティを持ち、そのうちの1つはメッセージのリストでした。メッセージオブジェクトのリストにレスポンス全体を逆シリアル化しようとすると、メッセージのJSONレスポンスではないため、エラーが発生しました。 – jmk22

関連する問題