Returning unescaped Json in MVC with Json.Net

The object is already serialized by Json.NET, and when you pass it to Json() it gets encoded twice. If you must use Json.NET instead of the built in encoder, then the ideal way to handle this would be to create a custom ActionResult accepts the object and calls Json.net internally to serialize the object and return it as an application/json result.

EDIT

This code is for the solution mentioned above. It's untested, but should work.

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));
    }
}

and in your controller just do:

return new JsonDotNetResult(result);

You can also do this

public ActionResult GetTimelineJson()
{
    var result = new MyGraph([some data...]);
    return Content(JsonConvert.SerializeObject(result), "application/json");
}

Note that you should change return type from JsonResult to ActionResult


You are Jsoning it twice, the Json method is json serializing your already converted string. If you want to use JsonConvert then write that directly to the response stream.