RestSharpを使用して、単純なWindowsPhone7アプリケーションのCambridgeDictionariesAPIからいくつかのデータを取得しています。検索クエリを実行すると、応答を確認するため、JSONで結果が得られます。コンテンツと結果は実際に返されますが、結果を逆シリアル化してリストボックス要素にバインドしようとすると機能しません。コードは次のとおりです。
リクエストハンドラクラス
namespace RestAPI
{
/// <summary>
/// This class is responsible for communicating with a RESTful web service.
/// </summary>
public class RequestHandler
{
//this property stores the API key
readonly string Accesskey = "";
//this property stores the base URL
readonly string BaseUrl = "https://dictionary.cambridge.org/api/v1/dictionaries/british/search";
//readonly string BaseUrl = "https://dictionary.cambridge.org/api/v1/dictionaries";
//Instance of the RestClient
private RestClient client;
//Constructor that will set the apikey
public RequestHandler(string Access="Doh52CF9dR8oGOlJaTaJFqa05PysEKIbEvd9VNQ7CqB81MyTUCggGNQO7PDyrsyY")
{
this.Accesskey = Access.Trim();
client = new RestClient(this.BaseUrl);
}
//Execute function
public List<SearchResult> Execute(string word)
{
List<SearchResult> data = new List<SearchResult>();
RestRequest request = new RestRequest();
request.RequestFormat = DataFormat.Json;
request.AddHeader("accessKey",Accesskey);
request.AddParameter("pageIndex","1");
request.AddParameter("pageSize","5");
request.AddParameter("q",word.Trim());
client.ExecuteAsync<List<SearchResult>>(request,(response)=>{
try
{
var resource = response.Data;
if(response.ResponseStatus == ResponseStatus.Completed)
MessageBox.Show(resource.Count.ToString());
//MessageBox.Show(resource.ToString());
foreach(SearchResult s in resource)
{
data.Add(s);
}
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
});
return data;
}
}
}
メインページのファイルの背後にあるコード。
namespace RestAPI
{
public partial class MainPage : PhoneApplicationPage
{
public RequestHandler handler = new RequestHandler();
public List<SearchResult> info = new List<SearchResult>();
// Constructor
public MainPage()
{
InitializeComponent();
}
private void search_Click(object sender, RoutedEventArgs e)
{
info = handler.Execute(searchBox.Text);
listBox1.Items.Add("Testing");
foreach (SearchResult s in info)
{
listBox1.Items.Add(s.entryLabel);
}
}
}
}
データが逆シリアル化されるモデルクラス。
namespace RestAPI
{
public class SearchResult
{
public string entryLabel{get;set;}
public string entryUrl{get;set;}
public string entryId { get; set; }
}
}
返されるサンプルJSONデータ。
{
"resultNumber": 49,
"results": [
{
"entryLabel": "dog noun ANIMAL ",
"entryUrl": "http://dictionary.cambridge.org/dictionary/british/dog_1",
"entryId": "dog_1"
},
{
"entryLabel": "dog noun PERSON ",
"entryUrl": "http://dictionary.cambridge.org/dictionary/british/dog_2",
"entryId": "dog_2"
},
{
"entryLabel": "dog verb FOLLOW ",
"entryUrl": "http://dictionary.cambridge.org/dictionary/british/dog_3",
"entryId": "dog_3"
}
],
"dictionaryCode": "british",
"currentPageIndex": 1,
"pageNumber": 17
}