我正在尝试通过jQuery将IEnumerable模型转换为Json数组,如下所示:
@model IEnumerable<SamsungTools.Models.SaleCenter>
var arr = @Html.Raw(Json.Encode(Model))
但是错误提示为:
序列化类型为object的对象时检测到循环引用 'System.Data.Entity.DynamicProxies.SaleCenter_7A0CE6A0DDE13787CC1DADED551C4B390761E2E4BC6E0E6F5B8DF894725F4934'。
我的代码有什么问题?
答案 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>