.Net MVC5异步请求Entity Framework 无限循环解决方法

  Entity Framework 存在一对多、多对多之间的关系,相互依赖,在返回JSON数据时往往会出现相互引用造成的无限循环问题,对于第三方提供的json序列还通过特性、序列化配置可以解决掉无限循环的问题,因此我们可以利用第三方库解决掉MVC返回JSON无限循环的问题。

  我们可以利用Newtonsoft.Json 的JsonSerializerSettings类进行序列化的设置

  

  对于ReferenceLoopHandling枚举类型

 #region 程序集 Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
// E:\VsGit\DigitizationPlatform\dll\Newtonsoft.Json.dll
#endregion namespace Newtonsoft.Json
{
//
// 摘要:
// Specifies reference loop handling options for the Newtonsoft.Json.JsonSerializer.
public enum ReferenceLoopHandling
{
//
// 摘要:
// Throw a Newtonsoft.Json.JsonSerializationException when a loop is encountered.
Error = ,
//
// 摘要:
// Ignore loop references and do not serialize.
Ignore = ,
//
// 摘要:
// Serialize loop references.
Serialize =
}
}

  我们可以设置JsonSerializerSettings

           JsonSerializerSettings set = new JsonSerializerSettings();
set.Formatting = Formatting.Indented;
set.DateFormatString = "yyyy-MM-dd HH:mm:ss";
//set.MaxDepth = 10;
set.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

  这样我们便可以解决JsonResult返回JSON无限循环问题了

重写MVC -> JsonResult

 using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc; namespace Goldwind.Framework.Web.OverrideExtension
{
public class MyJsonResult: JsonResult
{
public MyJsonResult() { }
public MyJsonResult(object Data) {
this.Data = Data;
}
public MyJsonResult(object Data, JsonRequestBehavior JsonRequestBehavior = JsonRequestBehavior.DenyGet) :this(Data){
this.JsonRequestBehavior = JsonRequestBehavior;
}
public MyJsonResult(object Data, string ContentType,Encoding ContentEncoding = null, JsonRequestBehavior JsonRequestBehavior = JsonRequestBehavior.DenyGet) :this(Data,JsonRequestBehavior) {
this.ContentType = ContentType;
if(ContentEncoding != null)
{
this.ContentEncoding = ContentEncoding;
}
}
public override void ExecuteResult(ControllerContext context)
{
if(this.JsonRequestBehavior == JsonRequestBehavior.DenyGet
&& string.Compare(context.HttpContext.Request.HttpMethod,"Get",true) == )
{
throw new InvalidOperationException();
}
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = string.IsNullOrEmpty(this.ContentType) ?
"application/json" : this.ContentType;
if(this.ContentEncoding != null)
{
response.ContentEncoding = this.ContentEncoding;
}
if(null != this.Data)
{
JsonSerializerSettings set = new JsonSerializerSettings();
set.Formatting = Formatting.Indented;
set.DateFormatString = "yyyy-MM-dd HH:mm:ss";
//set.MaxDepth = 10;
set.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
response.Write(JsonConvert.SerializeObject(this.Data,set));
}
}
}
}

.Net MVC5异步请求Entity Framework 无限循环解决方法的更多相关文章

  1. MVC5 新建项目里不包含jquery.unobtrusive-ajax.js(MVC5异步表单的问题)解决方法

    Asp.NET MVC 5 高级编程第5版.pdf 中有解决方法: 用NUGET程序包管理器控制台安装下面这两个文件 Install-Package jQuery –version 1.10.2 In ...

  2. VBS文件无限循环解决办法

    VBS文件无限循环解决办法,也就相当于编程中的停止运行指令. 那么如何关掉VBS文件呢?当然关机后会自动关掉,还有另外一种方法就是,在"任务管理器"中找到进程"WScri ...

  3. Nginx出现“413 Request Entity Too Large”错误解决方法

    Nginx出现“413 Request Entity Too Large”错误解决方法 2011-03-25 13:49:55|  分类: 默认分类 |  标签:413  request  entit ...

  4. Nginx 出现413 Request Entity Too Large得解决方法

    Nginx 出现413 Request Entity Too Large得解决方法 默认情况下使用nginx反向代理上传超过2MB的文件,会报错413 Request Entity Too Large ...

  5. 第三篇:异步请求遇上for循环怎么做

    场景:读取Excel数据(地名),发送请求到百度地图,从返回的json格式数据取出坐标数据(逗号隔开的两个float型数值),拼接成了分号隔开的一个字符串data,接下来需要利用“百度坐标转换API” ...

  6. Entity Framework优缺点及使用方法总结

    Entity Framework是M$提供的一个ORM框架,它旨在为小型应用程序中数据层的快速开发提供便利. nuget上185W多的下载量,说明.Net开发人员还是比较喜欢用EF的.但是EF在提供了 ...

  7. Entity Framework 插入数据 解决主键非自增问题

    http://blog.csdn.net/educast/article/details/8632806 与Entity Framework相伴的日子痛并快乐着.今天和大家分享一下一个快乐,两个痛苦. ...

  8. Get,Post请求中文乱码问题有效解决方法

    本文主要介绍如何有效解决web请求中的乱码问题,其实解决方法有很多种,不同的请求类型解决方法也不相同. 本文只介绍最方便的一种: 1.先修改jsp中的编码方式 2.针对Post方式提交的请求如果出现乱 ...

  9. Nginx出现413 Request Entity Too Large错误解决方法

    Nginx出现的413 Request Entity Too Large错误,这个错误一般在上传文件的时候出现,打开nginx主配置文件nginx.conf,找到http{}段,添加 解决方法就是 打 ...

随机推荐

  1. Android 中与 so 有关的一个大坑

    Android 应用开发中不可避免的会引入第三方的代码.如果是开源项目风险相对可控,如果引入商用的 SDK 那就要谨慎了,难免会有这样或那样的问题.比如我们今天要说的这一个. 对集成过第三方 SDK ...

  2. EBS条形码打印

    Oracle  提供两种方式实现 128 码的编码 第一种方式是使用 Reports Builder 实现对 128 码编码, 在 Metalink 305090.1[1]  有 比较详尽的描述,其中 ...

  3. MO_GLOBAL - EBS R12 中 Multi Org 设计的深入研究 (3)

    这是多组织访问的第三篇文章,翻译自Anil Passi的MO_GLOBAL-Dive into R12 Multi Org Design 我希望你已经读了文章 EBS R12 中的 Multi Org ...

  4. ROS_Kinetic_01 在ubuntu 16.04安装ROS Kinetic 2017.01更新

    ROS_Kinetic系列学习(一),在ubuntu 16.04安装ROS Kinetic. Celebrating 9 Years of ROS! ubuntu16.04已经发布半年多了,ROS的K ...

  5. BAT有增有减 互联网2015校园…

    又到一年开学季,也是毕业生开始被各种招聘.宣讲所围绕的时节. 在众多行业中,互联网在过往几年,也属于较热门的第一梯队之中.不过,在2015年的经济形势下,大家不由地疑问,互联网企业的招聘还会持续吗? ...

  6. json进阶(一)js读取解析JSON类型数据

    js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...

  7. 从"按层次输出二叉树"到"求解二叉树深度"的总结

    本文是在学习中的总结,欢迎转载但请注明出处:http://write.blog.csdn.net/postedit/41964669 最近在刷LeetCode上的算法题,发现好多题目的解题思路大体是一 ...

  8. ShapeDrawable做放大镜效果

    引用一下ShapeDrawable的类的说明: java.lang.Object    ? android.graphics.drawable.Drawable      ? android.grap ...

  9. 给Cocos2D视图添加手势支持

    见如下代码: UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self ac ...

  10. 关于学习MMU的一点感想

    MMU的一个主要服务是能把各个人物作为各自独立的程序在其自己的虚拟存储空间中运行. 虚拟存储器系统的一个重要特征是地址重定位.地址重定位是将处理器核产生的地址转换到主存的不同地址,转换由MMU硬件完成 ...