博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json
阅读量:4287 次
发布时间:2019-05-27

本文共 1883 字,大约阅读时间需要 6 分钟。

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

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

使用方式1:

//使用Newtonsoft 的序列化工具,可以设置忽略循环引用 方法1//但是还有有循环结构数据的转化,只是循环的级数固定了List
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
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
scores { get; set; }
默认序列化的时候就会过滤掉Ignore的

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

更多:

转载地址:http://wuogi.baihongyu.com/

你可能感兴趣的文章
Linux服务器上修改Mysql的密码
查看>>
Fragment碎片入门教程
查看>>
Android UI根据屏幕分辨率决定加载布局
查看>>
Java面试总结
查看>>
Processing of multipart/form-data request failed. Stream ended unexpectedly
查看>>
Linux上定时备份MySQL数据库
查看>>
xml解析之PULL
查看>>
安卓大神开源项目
查看>>
快递轨迹第三方接口接入(快递鸟)
查看>>
java多线程详解(一)
查看>>
Eclipse背景颜色修改--护眼色,黑色
查看>>
Servlet技术浅析(九)之-----下载文件和上传文件
查看>>
一台linux操作系统上配置多台Tomcat服务
查看>>
maven入门浅析(二)-----maven集成eclipse、jboss
查看>>
正则表达式入门教程(三)
查看>>
正则表达式入门教程(四)
查看>>
JAVA程序员成长之路的总结
查看>>
javaEE工程师学习路线图
查看>>
java工程师进阶之路
查看>>
linux系统一个tomcat配置两个域名,每个域名对应一个项目
查看>>