【问题标题】:A circular reference was detected while serializing an object of type JSON MVC [duplicate]序列化 JSON MVC 类型的对象时检测到循环引用 [重复]
【发布时间】:2017-03-19 16:42:45
【问题描述】:

我按照这个视频Youtube的说明进行操作

在我的控制器中:

public ActionResult loaddatacate()
        {
            BBDbModel context = new BBDbModel();
            context.Configuration.ProxyCreationEnabled = false;
            var data = context.Drinks_Category.ToList();
            return Json(new { data = data }, JsonRequestBehavior.AllowGet);
        }

在我看来:

<script type="text/javascript">
        $(document).ready(function (e) {
            $("#example1").DataTable({
                "ajax": {
                    "url": "/Admin/AdminHome/loaddatacate",
                    "type": "GET",
                    "datatype": "json"
                },
                "columns": [
                    { "data": "Id_category", "autowidth": true },
                    { "data": "Name_category", "autowidth": true },
                    { "data": "Parent", "autowidth": true }
                ]
            });
            var Parent =  @Html.Raw(Json.Encode(ViewBag.Parent));
            $(".parent").autocomplete({
                source: Parent
            });
        });

数据库中的“Drinks_category”表有 3 列:Id_category、Name_category、Parent

错误是:

在序列化“WebApplication3.Models.Framework.Drinks_Category”类型的对象时检测到循环引用。

Drinks_Category 类:

public partial class Drinks_Category
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Drinks_Category()
        {
            Drinks = new HashSet<Drink>();
            Drinks_Category1 = new HashSet<Drinks_Category>();
        }

        [Key]
        [StringLength(10)]
        public string Id_category { get; set; }

        [StringLength(20)]
        public string Name_category { get; set; }

        [Required]
        [StringLength(10)]
        public string Parent { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Drink> Drinks { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Drinks_Category> Drinks_Category1 { get; set; }

        public virtual Drinks_Category Drinks_Category2 { get; set; }
    }

请帮助我。谢谢!

【问题讨论】:

  • db如何布局,有什么限制?
  • 我不明白你的问题,BBDbModel 是一个 DbContext
  • Var 数据是一个精确的列表,我以为是 JSON 导致的错误
  • 循环引用来自一个表。我们不知道数据映射看起来如何
  • 您能否在您的return 调用之前在data 上设置一个断点,以查看您的结果是否良好,即具有您期望的结果数量的非代理类,它们只是@987654327 @ 对象并且没有其他急切加载的实体?

标签: javascript c# json asp.net-mvc


【解决方案1】:

据我所知,当您尝试序列化例如类说 class1 时,可能会出现这种错误,该类说 class1 通过属性引用另一个类说 class2,然后 class2 引用属性 class1。循环引用是因为从class1到class2,从class2到class1

【讨论】:

    【解决方案2】:

    指示序列化程序忽略循环引用,如:

    var data = JsonConvert.SerializeObject(myList, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore});
    

    然后像这样返回它:

    return Json(new { data = data }, JsonRequestBehavior.AllowGet);
    

    【讨论】:

    • 错误:为第 0 行第 0 列请求未知参数“Id_category”。:(
    • 我检查网络 XHR:是数据吗? "[{\"Id_category\":\"MILKTEA\",\"Name_category\":\"Trà sữa \",\"Parent\":\"CATE \"},{\"Id_category\":\" MILKTEA \",\"Name_category\":\"Trà sữa \",\"Parent\":\"CATE \"}]"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2012-12-01
    • 2015-09-09
    • 2012-09-26
    • 2015-01-21
    相关资源
    最近更新 更多