0

使用内置的 json 转换器,我在我的操作中返回多个对象,如下所示:

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

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

这显然不能编译:

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

我不想为此创建一个包含这两个属性的额外视图模型。

我可能对默认的 Json javascript 序列化程序有错误的理解吗?

4

2 回答 2

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" } } }
于 2012-06-03T11:16:44.437 回答
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});
}
于 2012-06-03T12:39:21.587 回答