使用Json.Net返回多个对象

时间:2012-06-03 10:56:17

标签: asp.net-mvc json json.net

使用内置的json转换器,我会在我的动作中返回多个对象:

return Json(new { success = true, data = units });

当我使用JSON.NET库时,我该怎么做?

这显然不能编译:

return new { success = true, data = JsonConvert.SerializeObject(units) };

我不想为包含这两个属性的内容创建额外的viewmodel。

我是否对默认的Json javascript序列化程序有错误的理解?

2 个答案:

答案 0 :(得分:0)

在第二个示例中,JsonConvert.SerializeObject(units)将返回一个返回给JavaScript的字符串。 JavaScript不会将data视为包含一些“真实”数据,而是一个简单的字符串,其中包含圆括号。

像往常一样使用你的第一句话。 MVC的Json方法将序列化其中的对象。

例如:

class Units
{
    public int Width { get; set; }
    public int Height { get; set; }
}

...

Units u = new Units { Width = 34, Height = 20 };

return Json(new { success = true, data = units });

将导致Json看起来与此类似:

{ "success" : "true", "data" : { "Height" : "20", "Width" : "34" } } }

答案 1 :(得分:0)

如果要使用Newtonsoft.Json序列化对象,可以创建一个新的ActionResult类并在结果中传递数据。

例如:

public class NewtonsoftJsonResult : ContentResult
{
    private readonly object _data;

    public NewtonsoftJsonResult(object data)
    {
        _data = data;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        Content = JsonConvert.SerializeObject(_data);
        ContentType = "application/json";

        base.ExecuteResult(context);
    }
}

只需将匿名对象作为数据返回自定义ActionResult:

public ActionResult Index()
{
    return new NewtonsoftJsonResult(new { success = true, data = units});
}