首页 > 代码库 > 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题

使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题

先看一个T4模板生成的model实体类

 1 著作权归作者所有。 2 商业转载请联系作者获得授权,非商业转载请注明出处。 3 作者:卷猫 4 链接:http://anneke.cn/ArticleInfo/Detial/15 5 来源:Anneke.cn 6  7 //------------------------------------------------------------------------------ 8 // <auto-generated> 9 //     此代码已从模板生成。10 //11 //     手动更改此文件可能导致应用程序出现意外的行为。12 //     如果重新生成代码,将覆盖对此文件的手动更改。13 // </auto-generated>14 //------------------------------------------------------------------------------15  16 namespace MyBlog.Model17 {18     using Newtonsoft.Json;19     using System;20     using System.Collections.Generic;21     22     public partial class ArticleType23     {24         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]25         public ArticleType()26         {27             this.ArticleInfo = new HashSet<ArticleInfo>();28         }29     30         public int Id { get; set; }31         public string Title { get; set; }32         public int ParentId { get; set; }33     34         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]35         [JsonIgnore]36         public virtual ICollection<ArticleInfo> ArticleInfo { get; set; }37     }38 }

这是一个文章分类实体,与文章实体,是一对多的关系(一个分类下可以有很多篇文章,而一个文章只有一个分类)

这里有一个导航属性,我们控制器里将该对象序列化成json字符串的时候,会引起循环引用的问题。

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:卷猫链接:http://anneke.cn/ArticleInfo/Detial/15来源:Anneke.cnpublic virtual ICollection<ArticleInfo> ArticleInfo { get; set; }

解决方法:我们使用Json.NET - Newtonsoft来进行序列化 首先为该导航属性加一个特性,该特性表示序列化的时候会忽略这个导航属性

 

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:卷猫链接:http://anneke.cn/ArticleInfo/Detial/15来源:Anneke.cn[JsonIgnore]public virtual ICollection<ArticleInfo> ArticleInfo { get; set; }

然后就可以进行序列化操作了

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:卷猫链接:http://anneke.cn/ArticleInfo/Detial/15来源:Anneke.cnstring json=JsonConvert.SerializeObject(articleType);

 

使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题