使用内置的json转换器,我会在我的动作中返回多个对象:
return Json(new { success = true, data = units });
当我使用JSON.NET库时,我该怎么做?
这显然不能编译:
return new { success = true, data = JsonConvert.SerializeObject(units) };
我不想为包含这两个属性的内容创建额外的viewmodel。
我是否对默认的Json javascript序列化程序有错误的理解?
答案 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});
}