Ove*_*lew 18 c# asp.net-mvc json json.net
如何在MVC项目中使用Json.Net返回未转义的Json?
到目前为止,我序列化了一个基本对象,并让Json.Net对其进行序列化:
public JsonResult GetTimelineJson()
{
    var result = new MyGraph([some data...]);
    return Json(JsonConvert.SerializeObject(result), JsonRequestBehavior.AllowGet);
}
结果:
"{\r\n  \"id\": \"myGraph\",\r\n  \"title\": \"Graph title\",\r\n [...]
任何将它包装成HtmlString等的尝试都会导致在线上传递一个空集(尽管调试点显示它正确地未转义).我已经检查过HTTP标头中是否正确设置了内容类型.
Rya*_*ght 32
该对象已由Json.NET序列化,当您将其传递给Json()时,它会被编码两次.如果你必须使用Json.NET而不是内置编码器,那么处理这个的理想方法是创建一个自定义ActionResult接受对象并在内部调用Json.net来序列化对象并将其作为application/json结果返回.
编辑
此代码用于上述解决方案.这是未经测试的,但应该有效.
public class JsonDotNetResult : ActionResult
{
    private object _obj { get; set; }
    public JsonDotNetResult(object obj)
    {
        _obj = obj;
    }
    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.AddHeader("content-type", "application/json");
        context.HttpContext.Response.Write(JsonConvert.SerializeObject(_obj));
    }
}
并在您的控制器中只做:
return new JsonDotNetResult(result);
Cag*_*lan 30
你也可以这样做
public ActionResult GetTimelineJson()
{
    var result = new MyGraph([some data...]);
    return Content(JsonConvert.SerializeObject(result), "application/json");
}
请注意,您应该将返回类型从JsonResult更改为ActionResult
| 归档时间: | 
 | 
| 查看次数: | 16162 次 | 
| 最近记录: |