【问题标题】:Convert IEnumerable model to Json array将 IEnumerable 模型转换为 Json 数组
【发布时间】:2019-02-28 18:43:45
【问题描述】:

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

@model IEnumerable<SamsungTools.Models.SaleCenter>

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

但是引发了一个错误:

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

我的代码有什么问题?

【问题讨论】:

标签: c# json model-view-controller


【解决方案1】:

感谢@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>

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多