ASP.NET服务端移除JSON斜杠问题求助
解决Web API返回JSON时多余斜杠的问题
我一眼就看出问题所在了——你现在的做法是先把DataTable序列化成JSON字符串,然后返回这个字符串,但Web API控制器会自动对返回的字符串进行二次序列化,这就是为什么你手动替换斜杠后还是会出现的原因!
问题根源
当你返回string类型的结果时,Web API会把它当成普通文本,而不是已经序列化好的JSON。所以它会把你的JSON字符串里的双引号转义成\",也就是你看到的多余斜杠。你之前的Replace("\\", "")处理的是第一次序列化的结果,但二次序列化又把斜杠加回来了。
解决方案
有两种简单的办法可以解决这个问题:
方案1:直接返回对象,让控制器处理序列化
把方法的返回类型改成IHttpActionResult,直接返回DataTable对象,让Web API负责正确序列化,这样就不会有多余转义了:
public IHttpActionResult GetEmployeeDetails(string AccessCard) { DataTable dt = GetEmployeeByAccessCard(AccessCard); if (dt.Rows.Count > 0) { return Json(dt); } else { return Json("No Data found"); } }
方案2:返回预序列化的JSON,告诉控制器不要二次处理
如果必须返回字符串类型,那就用HttpResponseMessage返回,并指定内容类型为application/json,这样控制器就会把它当作已完成的JSON直接返回,不会再序列化:
public HttpResponseMessage GetEmployeeDetails(string AccessCard) { DataTable dt = GetEmployeeByAccessCard(AccessCard); if (dt.Rows.Count > 0) { string jsonResult = JsonConvert.SerializeObject(dt); return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(jsonResult, Encoding.UTF8, "application/json") }; } else { // 注意这里要把字符串用双引号包起来,符合JSON格式 return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("\"No Data found\"", Encoding.UTF8, "application/json") }; } }
额外提醒
不要再用Replace("\\", "")这种手动处理的方式了,这很容易引入其他格式问题。正确的做法是让序列化机制只运行一次,要么让Web API处理对象,要么明确告诉它你返回的是已经序列化好的JSON。
内容的提问来源于stack exchange,提问作者Vahid
相关产品推荐
相关产品推荐

