解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2565字,纯文字阅读大概需要4分钟。
内容图文
![解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json](/upload/InfoBanner/zyjiaocheng/1246/7971171a2a694782a39b23d41a00f02b.jpg)
1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题:
方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore
方式2:指定 JsonIgnore忽略 引用对象
实例1,解决MVC的Json序列化引用方法:
step1:在项目上添加引用 Newtonsoft.Json程序包,命令:Insert-Package Newtonsoft.Json
step2:在项目中添加一个类,继承JsonResult,代码如下:
![技术分享](/upload/getfiles/default/2022/11/7/20221107083937950.jpg)
![技术分享](/upload/getfiles/default/2022/11/7/20221107083938093.jpg)
/// <summary> /// 继承JsonResut,重写序列化方式 /// </summary> public class JsonNetResult : JsonResult { public JsonSerializerSettings Settings { get; privateset; } public JsonNetResult() { Settings = new JsonSerializerSettings { //这句是解决问题的关键,也就是json.net官方给出的解决配置选项. ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; } publicoverridevoid ExecuteResult(ControllerContext context) { if (context == null) thrownew ArgumentNullException("context"); if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) thrownew InvalidOperationException("JSON GET is not allowed"); HttpResponseBase response = context.HttpContext.Response; response.ContentType = string.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType; if (this.ContentEncoding != null) response.ContentEncoding = this.ContentEncoding; if (this.Data == null) return; var scriptSerializer = JsonSerializer.Create(this.Settings); using (var sw = new StringWriter()) { scriptSerializer.Serialize(sw, this.Data); response.Write(sw.ToString()); } } }
step3:在项目添加BaseController,重写Json()方法,代码如下:
![技术分享](/upload/getfiles/default/2022/11/7/20221107083937950.jpg)
![技术分享](/upload/getfiles/default/2022/11/7/20221107083938093.jpg)
public class BaseController : Controller { public StudentContext _Context = new StudentContext(); ///<summary>/// 重写,Json方法,使之返回JsonNetResult类型 ///</summary>protectedoverride JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) { returnnew JsonNetResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior }; } }
step4.向平时一样使用就可以了
![技术分享](/upload/getfiles/default/2022/11/7/20221107083937950.jpg)
![技术分享](/upload/getfiles/default/2022/11/7/20221107083938093.jpg)
// 获取列表 public JsonResult GetList() { List<student> list = _Context.students.Where(q => q.sno == "103").ToList(); //方法1return Json(list); //方法2 //return new JsonNetResult() { // Data=list //}; }
获取的结果,说明,这种方式指定忽略循环引用,是在指定循环级数后忽略,返回的json数据中还是有部分循环的数据
解决EF Json序列化循环引用方法2,在指定的关联对象上,添加JsonIgnore 方法注释
[JsonIgnore] public virtual ICollection<score> scores { get; set; }
返回结果中,没有关联表数据
相关文章:
Newtonsoft.Json简介:http://blog.csdn.net/u011127019/article/details/51706619
EF的Json序列化,循环引用:http://blog.csdn.net/u011127019/article/details/51706659
原文:http://www.cnblogs.com/tianma3798/p/5596703.html
内容总结
以上是互联网集市为您收集整理的解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json全部内容,希望文章能够帮你解决解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。