序列化 JSON MVC 类型的对象时检测到循环引用



我按照这个视频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,父

错误是:

序列化类型为"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; }
    }

请帮助我。谢谢!

我所知,当您尝试序列化例如一个类说类 class1 时,可能会引发这种错误,该类引用一个属性另一个类说 class2,反过来类 2 引用属性 class1。 循环引用是因为从类 1 转到类 2,从类 2 转到类 1

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

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

并像这样返回它:

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

最新更新