码迷,mamicode.com
首页 > Web开发 > 详细

EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json

时间:2018-07-24 23:43:47      阅读:341      评论:0      收藏:0      [点我收藏+]

标签:sha   cores   serial   ssi   默认   div   ons   过滤   就是   

1.在使用EF时,由于数据库主外键关联,将对象进行Json序列化时会遇到循环引用的问题

//EF 中由于数据库主外键关联,对象的序列化经常出现循环引用问题  
//使用.Net 自带的序列化工具,序列化出现循环引用问题  
List<student> list = _Context.students.ToList();  
JavaScriptSerializer ser = new JavaScriptSerializer();  
string str = ser.Serialize(list);  
Console.WriteLine(str);  


解决方案1:使用Newtonsoft.Json工具序列化,忽略循环引用

 

使用方式1:

//使用Newtonsoft 的序列化工具,可以设置忽略循环引用 方法1  
//但是还有有循环结构数据的转化,只是循环的级数固定了  
List<student> list = _Context.students.Where(q => q.sno == "103").ToList();  
JsonSerializerSettings settings = new JsonSerializerSettings();  
settings.MissingMemberHandling = MissingMemberHandling.Ignore;  
//settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;  
string result = JsonConvert.SerializeObject(list, settings);  
Console.WriteLine(result);  

 

使用方式2:

//使用Newtonsoft 的序列化工具,可以设置忽略循环引用,方法2  
//但是还有有循环结构数据的转化,只是循环的级数固定了  
List<student> list = _Context.students.Where(q => q.sno == "103").ToList();  
JsonSerializerSettings settings = new JsonSerializerSettings();  
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;  
JsonSerializer ser = JsonSerializer.Create(settings);  
using (StringWriter sw = new StringWriter())  
{  
    ser.Serialize(sw, list);  
    Console.WriteLine(sw.ToString());  
}  

 

 

解决方案2:使用Newtonsoft.Json中的方法注释,在Json序列化的时候忽略关联属性

重点设置忽略方法注释:

 

[JsonIgnore]  
public virtual ICollection<score> scores { get; set; }  

 

默认序列化的时候就会过滤掉Ignore的

 

//使用Newtonsoft 的序列化工具,可以设置忽略循环引用 方法3(推荐)  
//本方法结合方法注释 [JsonIgnore] ,就是在Json序列化的时候,忽略[JsonIgnore]指定的属性  
//这个方法相对比较常用  
List<student> list = _Context.students.Where(q => q.sno == "103").ToList();  
string result = JsonConvert.SerializeObject(list);  
Console.WriteLine(result);  
//还可以显示指定忽略  
List<student> list = _Context.students.Where(q => q.sno == "103").ToList();  
JsonSerializerSettings settings = new JsonSerializerSettings();  
settings.MissingMemberHandling = MissingMemberHandling.Ignore;  
string result = JsonConvert.SerializeObject(list, settings);  
Console.WriteLine(result);  

 

 

 

EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json

标签:sha   cores   serial   ssi   默认   div   ons   过滤   就是   

原文地址:https://www.cnblogs.com/yanglang/p/9363110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!