使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
Posted 琴吹䌷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 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.Model 17 { 18 using Newtonsoft.Json; 19 using System; 20 using System.Collections.Generic; 21 22 public partial class ArticleType 23 { 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.cn public 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.cn string json=JsonConvert.SerializeObject(articleType);
以上是关于使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题的主要内容,如果未能解决你的问题,请参考以下文章
entityframework克隆或将实体实例复制到另一个对象