使用 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克隆或将实体实例复制到另一个对象

为啥 EntityFramework 不添加我的对象?

ExpressMapper / EntityFramework - 没有为此对象定义无参数构造函数

EntityFramework基本使用

EntityFramework 生成的类

EntityFramework 保存约束