0

私は 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));
4

1 に答える 1

0

例外は、サービス呼び出しによって例外がスローされ、例外文字列が有効な JSON オブジェクトではないため、応答を解析できないことが原因である可能性が最も高いです。

以下を確認してください。

  • ネットワーク呼び出しは本当に成功しましたか? 失敗した場合は、クライアントでの例外処理が適切でなく、例外オブジェクトの応答を JSON オブジェクトにキャストしようとしている可能性があり、その結果、表示されるエラー メッセージが表示されます。
  • 呼び出しはサーバーに到達しましたが、例外が発生したか、呼び出しによってクライアントにエラー メッセージが返されました。これも有効な JSON オブジェクトではないため、キャストできません。
于 2013-03-07T15:58:46.053 に答える