首页 > 解决方案 > 为什么需要截断 JSON.parse 的 StringContent 响应

问题描述

我编写了 WebApi 过滤器来检测并发问题。在行动 OnActionExecuted 我设置响应内容如下: 在此处输入图像描述

actionExecutedContext.Response.Content = new System.Net.Http.StringContent( "'{ \"hasValidationErrors\": true, \"validationErrors\": " + System.Web.Helpers.Json.Encode( validationErrors ) + ", \"concurrencyIssue\": true }'", System.Text.Encoding.UTF8, "application/string" );

当我收到它并写入控制台时,它看起来像在打印屏幕下方

然后,当我尝试这样做时:

JSON.parse(response.data)

我得到错误:

SyntaxError: Unexpected token ' in JSON at position 0

但是当我这样做时

JSON.parse( response.data.substring(1, response.data.length - 1) )

它按预期工作,意味着将字符串转换为 json 数据。

所以我的问题是,为什么我必须截断 response.data?我猜想,从打印屏幕的第一行可以看出,还有额外的引号。但是如何创建我的服务器响应以不将它们放在那里?为什么,当我登录时response.data(打印屏幕上的第三行),只有撇号,但没有引号?

标签: javascriptjsonasp.net-web-api

解决方案


这意味着您的 JSON 无效。尝试为您的响应创建一个模型类。然后解析。

例子 :

public class Response
{
   public bool hasValidationErrors;
   //public YourType validationErrors;
   public bool concurrencyIssue;         
 }
 var obj = new Response();
 obj.hasValidationErrors = true;
 obj.concurrencyIssue = true;         
 var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
 //Set Your Response

希望这有帮助。


推荐阅读