EF默认生成的类和JSON

时间:2010-08-23 00:02:10

标签: asp.net-mvc json entity-framework-4

我有

    List<Car> cars = 
        from c in myContext.Cars
        .Include("Wheels")
            .Include("Wheels.Nuts")
        orderby c.CarID

这些都是EF默认生成的对象。

我想把它变成包含所有汽车的JSON字符串,每个汽车都有它的轮子,每个轮子都有它的螺母,就像我从查询中得到的那样。

似乎从查询中取回匿名类是可行的,但我不知道如何获得3级深度的anon类?

有什么建议吗?任何新的框架可以实现这一目标吗?

非常感谢 --MB

3 个答案:

答案 0 :(得分:2)

我建议使用JavaScriptSerializer.Serialize方法:

new JavaScriptSerializer().Serialize(myContext.Cars.OrderBy(c => c.CarID).
    Select(c => new
    {
        id = c.CarID,
        vin = c.VIN,
        wheels = c.Wheels.Select(w => new
        {
            id = w.WeelID,
            nuts = w.Nuts.Select(n => new
            {
                id = n.NutID
            })
        })
    }));

答案 1 :(得分:0)

您可以使用AutoMapper轻松地从EF对象映射到ViewModel,然后将该ViewModel作为Json返回。你可以像这样定义你的ViewModel:

public class CarsViewModel
{
    public IList<Car> Cars { get; set; }

    public class Car
    {
        public int CarId { get; set; }
        public string Name { get; set; }
        // other stuff here

        public IList<CarsViewModel.Wheel> Wheels { get; set; }
    }

    public class Wheel
    {
        public int WheelId { get; set; }
        public string Brand { get; set; }
    }

    // etc. etc/
}

您只需在JS中包含所需内容的属性,而不是每个表中的所有列。然后,就像你一样从EF获取Car对象列表,并根据你的AutoMapper配置将其映射到CarsViewModel,并将CarsViewModel作为JsonResult的Data属性返回。

答案 2 :(得分:0)

你可以在View中使用这样的简单方法:

 public JsonResult GetList()
    {
        List<Car> cars = from c in myContext.Cars.Include("Wheels")
        .Include("Wheels.Nuts")orderby c.CarID
        return Json(cars.ToArray());
    }