如何返回带有unicode字符的json结果转义为\ u1234

我正在实现一个返回json结果的方法,如:

public JsonResult MethodName(Guid key){ var result = ApiHelper.GetData(key); //Data is stored in db as varchar with åäö return Json(new { success = true, data = result },"application/json", Encoding.Unicode, JsonRequestBehavior.AllowGet ); } 

显示的结果:

 {"success":true,"data":[{"Title":"Here could be characters like åäö","Link":"http://www.url.com/test",...}, 

但我想显示它像:

 {"success":true,"data":[{"Title":"Here could be characters like \u00e5\u00e4\u00f6","Link":"http:\/\/www.url.com\/test",...}, 

我怎么能做到这一点? 我可以转换它,解析它或更改web.config中的responseEncoding以使其显示unicode字符吗?

如果客户端是Web浏览器或任何其他正确处理http的客户端,只要您的服务器正确告诉客户端内容类型和内容编码,并且您选择的编码支持传出中的代码点,则无需转义数据。

如果客户端行为不正确,并且确实需要像这样转义字符串,则必须编写自己的ActionResult类并自行转义。 从JsonResult开始inheritance,并使用reflection来创建JSON文档。

这是一件苦差事!

编辑:这将帮助您入门

 public class MyController : Controller { public JsonResult MethodName(Guid key){ var result = ApiHelper.GetData(key); return new EscapedJsonResult(result); } } public class EscapedJsonResult : JsonResult { public EscapedJsonResult(T data) { this.Data = data; this.JsonRequestBehavior = JsonRequestBehavior.AllowGet; } public override ExecuteResult(ControllerContext context) { var response = context.HttpContext.Response; response.ContentType = "application/json"; response.ContentEncoding = Encoding.UTF8; var output = new StreamWriter(response.OutputStream); // TODO: Do some reflection magic to go through all properties // of the this.Data property and write JSON to the output stream // using the StreamWriter // You need to handle arrays, objects, possibly dictionaries, numbers, // booleans, dates and strings, and possibly some other stuff... All // by your self! } // Finds non-ascii and double quotes private static Regex nonAsciiCodepoints = new Regex(@"[""]|[^\x20-\x7f]"); // Call this for encoding string values private static string encodeStringValue(string value) { return nonAsciiCodepoints.Replace(value, encodeSingleChar); } // Encodes a single character - gets called by Regex.Replace private static string encodeSingleChar(Match match) { return "\\u" + char.ConvertToUtf32(match.Value, 0).ToString("x4"); } } 

有一些转义的方法,但没有一个完全符合你的要求( HtmlEncode和UrlEncode )你需要一个用户定义的函数来做这样的转义。

不确定这是否有帮助,但我通过使用以下行获取unicode字符:System.Web.Script.Serialization.JavaScriptSerializer jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); return Json(jsonSerializer.Serialize(validationResult));