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

Max*_*son 5 c# unicode asp.net-mvc json

我正在实现一个返回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 );
}
Run Code Online (Sandbox Code Playgroud)

显示的结果:

{"success":true,"data":[{"Title":"Here could be characters like åäö","Link":"http://www.url.com/test",...},
Run Code Online (Sandbox Code Playgroud)

但我想显示它像:

{"success":true,"data":[{"Title":"Here could be characters like \u00e5\u00e4\u00f6","Link":"http:\/\/www.url.com\/test",...},
Run Code Online (Sandbox Code Playgroud)

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

And*_*lad 4

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

如果客户端行为不正确,并且它确实需要像这样转义字符串,那么您将必须编写自己的ActionResult类并自己进行转义。JsonResult首先继承自,然后使用反射来创建您喜欢的 JSON 文档。

这是一件苦差事!

编辑:这将帮助您开始

public class MyController : Controller {
    public JsonResult MethodName(Guid key){
        var result = ApiHelper.GetData(key);
        return new EscapedJsonResult(result);
    }
}

public class EscapedJsonResult<T> : 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");
    }
}
Run Code Online (Sandbox Code Playgroud)