分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

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

发布时间:2023-09-06 02:05责任编辑:熊小新关键词:暂无标签

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

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved