将IEnumerable模型转换为Json数组

时间:2019-02-28 18:43:46

标签: c# json model-view-controller

我正在尝试通过jQuery将IEnumerable模型转换为Json数组,如下所示:

@model IEnumerable<SamsungTools.Models.SaleCenter>

var arr = @Html.Raw(Json.Encode(Model))

但是错误提示为:

  

序列化类型为object的对象时检测到循环引用   'System.Data.Entity.DynamicProxies.SaleCenter_7A0CE6A0DDE13787CC1DADED551C4B390761E2E4BC6E0E6F5B8DF894725F4934'。

我的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

感谢@ckuri,通过创建具有指定属性的新视图模型并将其列表传递给视图来解决。在新的视图模型中,我删除了两个属性,这些属性在JSon转换中导致自引用循环循环。

最后, 型号:

public class SaleCenterViewModel
{
    public string Title { get; set; }
    public string TitleEN { get; set; }
    public int Code { get; set; }
    public string Lat { get; set; }
    public string Lng { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
    public string AddressEN { get; set; }
    public static SaleCenterViewModel Set(SaleCenter saleCenter)
    {
        return new SaleCenterViewModel
        {
            Title = saleCenter.Title,
            TitleEN = saleCenter.TitleEN,
            Code = saleCenter.Code,
            Lat = saleCenter.Lat,
            Lng = saleCenter.Lng,
            Phone = saleCenter.Phone,
            Address = saleCenter.Address,
            AddressEN = saleCenter.AddressEN
        };
    }
}

商店:

public List<SaleCenterViewModel> GetAllSaleCenters()
{
    return
        db.SaleCenters
        .Select(SaleCenterViewModel.Set)
        .ToList();
}

控制器:

public ActionResult Map()
{
    GeneralStore gs = new GeneralStore();
    ViewData["Cities"] = gs.GetCitiesHaveSaleCenter();
    ViewData["Areas"] = gs.GetAllAreas();
    var saleCenters = gs.GetAllSaleCenters();
    return View(saleCenters);
}

查看:

@model List<SamsungTools.ViewModels.SaleCenterViewModel>

<script>
    var arr = @Html.Raw(Json.Encode(Model))
</script>