2013-03-07 48 views
0

我是新来使用API​​和使用asp.net我提出一个API的调用在我的asp.net web应用程序像这样获得从他们的反应:无效的JSON原始:

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)); 

回答

0

唯一的例外是最很可能是由于服务调用导致异常抛出和异常字符串不是有效的JSON对象,因此无法解析响应。

检查以下内容:

  • 难道网络呼叫真的成功吗?如果失败,很可能是客户端的异常处理不好,并且您试图将异常对象响应转换为JSON对象,并因此显示错误消息。
  • 该调用确实接通了服务器,并且出现异常和/或调用导致错误消息返回给客户端,该客户端又不是有效的JSON对象,因此无法将其转换为一个。