私は API を使用するのが初めてで、asp.net を使用して API からの応答を取得しています。次のように、asp.net Web アプリケーションで API を呼び出しています。
public ActionResult MakeCall() {
CallTRunkAPIResponse response = GET("https://apibetaus.calltrunk.com/api/v2/GetAccountSummarySimple?access_token=mytokenkeyhere");
return Content("Make a call");
}
応答を取得し、応答を json 形式に転送してから、次のように JavaScript シリアライザーを使用してオブジェクト型に変換するメソッドを作成しました。
public CallTRunkAPIResponse GET(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
request.Headers.Add("X-Client:" + "header info from api here");
request.Headers.Add("X-Authenticator-Session:" + "session key from api here");
request.Method = "GET";
request.ContentType = "application/json";
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
//return reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
var objText = reader.ReadToEnd();
CallTRunkAPIResponse myojb = (CallTRunkAPIResponse)js.Deserialize(objText, typeof(CallTRunkAPIResponse));
return myojb;
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
String errorText = reader.ReadToEnd();
// log errorText
}
throw;
}
}
}
私のオブジェクトは次のようなものです(以下の応答について、この応答クラスにどのプロパティを含める必要があるかわかりません:
public class CallTRunkAPIResponse {
public string Status { get; set; }
public string Content { get; set; }
public string Region { get; set; }
}
応答は次のようになりますが、エラーが発生します:
{
"Status":"OK",
"Content":{
"Region":"beta.us",
"CurrencyCode":"USD",
"CurrencySymbol":"$",
"Languages":["en"],
"Version":{
"Api":{
"DisplayVersion":"2.0",
"Version":3},
"Client":{
"ReportedVersion":0,
"NewestVersion":2,
"MinVersion":2}
}
}
}
しかし、私はこのエラーが発生しています:
System.ArgumentException: Invalid JSON primitive: .
で:
CallTRunkAPIResponse myojb = (CallTRunkAPIResponse)js.Deserialize(objText, typeof(CallTRunkAPIResponse));