解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题(Newtonsoft.Json)
来源:互联网 发布:一点一点吃干抹净淘宝 编辑:程序博客网 时间:2024/05/21 06:44
在mvc项目中时常因为外键关联引起循环引用问题,从而使程序报错,所以我在出现了循环引用问题后,从网上找到解决方案,进行了总结。
解决方案如下:
1、引用Newtonsoft.
2、再有引用循环的地方添定 JsonIgnore忽略 引用对象
一般应用对象在ef生成的model类里边。
3、在MVC项目中添加一个类,继承JsonResult,我一般写在model里边
代码如下:
/// <summary>/// 继承JsonResut,重写序列化方式/// </summary>public class JsonNetResult : JsonResult{ public JsonSerializerSettings Settings { get; private set; } public JsonNetResult() { Settings = new JsonSerializerSettings { //这句是解决问题的关键,也就是json.net官方给出的解决配置选项. ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; } public override void ExecuteResult(ControllerContext context) { if (context == null) throw new ArgumentNullException("context"); if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) throw new 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()); } }}
4、在项目的BaseController通用控制器中,重写Json()方法(或者在每一个控制器中重写),代码如下:
/// <summary> /// 重写,Json方法,使之返回JsonNetResult类型 /// </summary> protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) { return new JsonNetResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior }; }
6、然后就可以正常使用了,循环引用问题就不会再出现了。
参考文档:
http://www.cnblogs.com/tianma3798/p/5596703.html
阅读全文
1 0
- 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题(Newtonsoft.Json)
- [IgnoreDataMember]:json序列化循环引用的问题
- EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json
- 解决json-lib的一些序列化循环处理问题
- mvc 使用Newtonsoft.Json进行序列化json数据
- .net json序列化组件Json.NET(Newtonsoft.Json)
- Newtonsoft.Json序列化字符串-格式化和时间格式问题
- 【引用】DataTable 的 JSON 序列化
- json序列化问题
- Json序列化问题
- nodejs 循环引用JSON序列化错误的解决办法:TypeError: Converting circular structure to JSON
- Json序列化之.NET开源类库Newtonsoft.Json的研究
- Json序列化之.NET开源类库Newtonsoft.Json的研究
- EntityFramework中JSON序列化循环引用----JavaScriptSerializer
- Json序列化 解决Date问题
- 解决JSON序列化日期格式问题
- 前台页面反序列化Newtonsoft.Json序列化的时间问题
- Newtonsoft.Json序列化和反序列
- kNN近邻算法
- LeetCode
- Ruby 循环控制
- JSTL之数字、日期格式化<fmt:formatNumber/>、<fmt:formatDate/>
- mysql主从复制,数据量大, 高并发时,出现数据不一致
- 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题(Newtonsoft.Json)
- 同步/异步,阻塞/非阻塞
- 转自对javabean的一些理解
- 欢迎使用CSDN-markdown编辑器
- window VNC Viewer设置屏幕分配率
- 双向广搜 8数码问题
- LINUXsuid、sgid、sticky特殊权限位的含义和作用
- 九度OJ-题目1447-最短路径-floyd-dijisitra
- 20170627总结