.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. UNIX环境高级编程——无名管道和有名管道

    一.进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2 ...

  2. 《java入门第一季》之网络编程初探

    由于在写有关javaweb的博客,在写到web服务器的时候需要回顾网络编程的知识,提前把网络编程放在前面写. 直接上代码解释: import java.net.InetAddress; import ...

  3. Java由先序序列和中序序列还原二叉树

    还原本来的二叉树并不是一个非常简单的事,虽然思想比较简单,但过程却是比较繁琐.下面我拿先序序列和中序序列来讲一下原理吧. 从先序序列中我们一下子就可以得到二叉树的根节点是第一个元素,然后再中序序列中我 ...

  4. 【算法导论】B树

          一棵B树T是具有如下性质的有根树(设根为root): 1.每个节点x有一下域: (a)num,当前存储在节点x的关键字个数,关键字以非降序存放,因此key[i]<=key[i+1]& ...

  5. driver: Linux设备模型之input子系统详解

    本节从整体上讲解了输入子系统的框架结构.有助于读者从整体上认识linux的输入子系统.在陷入代码分析的过程中,通过本节的知识能够找准方向,明白原理. 本节重点: 输入子系统的框架结构 各层对应内核中的 ...

  6. Git版本控制:Git冲突解决 相关错误总结

    http://blog.csdn.net/pipisorry/article/details/46958699 冲突处理 git push冲突处理 git push时出现冲突:! [rejected] ...

  7. Zigbee技术开发一 设置NV_RESTORE

    需要试验一下设置NV_RESTORE之后,终端设备的处理逻辑,在IAR里面设置NV_RESTORE的地方如下

  8. SpriteBuilder切换解决方案以及CCB的修改与保存

    在SpriteBuilder中切换解决方案非常简单,可以按cmd+数字键即可. 如上图可以看到数字键1,2,3分别对应于3中不同的解决方案. 注意:当通过在CCB中包含一个Sub File Node的 ...

  9. ra_interface_lines_all 接口表各字段说明

    note:Description and Usage of Fields in RA_INTERFACE_LINES Table [ID 1195997.1] 核心内容: Field Name and ...

  10. Linux - crontab的创建以及注意事项

    [root@www ~]# crontab [-u username] [-l|-e|-r] 选项与参数: -u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排 ...