.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. Java 实现的各种经典的排序算法小Demo

    由于有上机作业,所以就对数据结构中常用的各种排序算法都写了个Demo,有如下几个: 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 选择排序 桶排序 Demo下载地址 下面谈一谈我对这几个排 ...

  2. iOS中 轮播图放哪最合适? 技术分享

    我们知道,轮播图放在cell或collectionViewCell上会影响用户层级交互事件,并且实现起来比较麻烦,现在推出一个技术点:答题思路是:将UIScrollView放在UIView或UICol ...

  3. UNIX环境高级编程——pthread_create的问题

    linux 下常用的创建多线程函数pthread_create(pthread_t * thread , pthread_attr_t * attr , void *(*start_routine)( ...

  4. Django练习——博客系统小试

    在上一篇博客Todolist的基础上(http://blog.csdn.net/hcx25909/article/details/24251427),本周继续进行实践,这次我要搭建一个简单的博客系统. ...

  5. pig的limit无效(返回所有记录)sample有效

    pig中,limit可以取样少部分数据,但有很多问题,比如数据不能少于10条,否则返回全部. 今天又遇到另一个问题: group后的数据,limit无效:也就是group后的数据,不能用limit,估 ...

  6. Shell入门之概念

    1.一切皆是文件: 在bash Shell 中一切皆是文件,不管是我们认为的文本文件,还是那些文件夹的东西,在这里都是文件,Linux只管比特和字节流,而不关心他们最终组成了什么格式,这些工作交给在L ...

  7. (二十七)QQ好友列表的实现

    QQ好友列表通过plist读取,plist的结构为一组字典,每个字典内有本组的信息和另外一组字典代表好友. 要读取plist,选择合适的数据结构,例如NSArray,然后调用initWithConte ...

  8. (十八)TableView实践(多组汽车品牌展示)

    对于多组数据,可能会用到模型的嵌套. 例如多组汽车,每组是一个模型,组内有多辆车的信息,每辆车的信息也是一个模型,相当于模型中有模型. 可以看到,每个item是一个字典,这要创建一个模型,而模型内部的 ...

  9. python的安装,IDLE基本操作

    §一.安装Python 1. 下载Active Python安装包 根据你机器型号download Python,32b选择for windows X86,64b选择for window 64b 2. ...

  10. 《java入门第一季》之面向对象综合小案例

    需求: /*     教练和运动员案例         乒乓球运动员和篮球运动员.         乒乓球教练和篮球教练.         跟乒乓球相关的人员都需要学习英语.         分析,这 ...