【问题标题】:Invalid JSON primitive:无效的 JSON 原语:
【发布时间】:2013-03-07 14:56:54
【问题描述】:

我不熟悉使用 API 并使用 asp.net 从他们那里获得响应我正在我的 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));

【问题讨论】:

    标签: asp.net json web-services javascriptserializer


    【解决方案1】:

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

    检查以下内容:

    • 网络调用真的成功了吗?如果失败,很可能是客户端的异常处理不好,您正在尝试将异常对象响应转换为 JSON 对象,从而导致您看到的错误消息。
    • 调用确实到达了服务器,并且出现了异常和/或调用导致返回给客户端的错误消息,这又不是一个有效的 JSON 对象,因此您不能将其转换为一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2020-07-31
      • 2014-04-17
      • 1970-01-01
      相关资源
      最近更新 更多