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);
}
Run Code Online (Sandbox Code Playgroud)
结果:
"{\r\n \"id\": \"myGraph\",\r\n \"title\": \"Graph title\",\r\n [...]
Run Code Online (Sandbox Code Playgroud)
任何将它包装成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));
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的控制器中只做:
return new JsonDotNetResult(result);
Run Code Online (Sandbox Code Playgroud)
Cag*_*lan 30
你也可以这样做
public ActionResult GetTimelineJson()
{
var result = new MyGraph([some data...]);
return Content(JsonConvert.SerializeObject(result), "application/json");
}
Run Code Online (Sandbox Code Playgroud)
请注意,您应该将返回类型从JsonResult更改为ActionResult
| 归档时间: |
|
| 查看次数: |
16162 次 |
| 最近记录: |