对于两张表A、B多对多的关系中,A的导航属性中有B,B的导航属性中有A,这样Json.net对A或者B对象序列化时会形成死循环

所以对于导航属性要加标签

首先在A、B实体类工程(Model)中引用Json.ne

然后对导航属性加不序列化标签([JsonIgnore])

//------------------------------------------------------------------------------
// <auto-generated>
// 此代码是根据模板生成的。
//
// 手动更改此文件可能会导致应用程序中发生异常行为。
// 如果重新生成代码,则将覆盖对此文件的手动更改。
// </auto-generated>
//------------------------------------------------------------------------------ namespace CZBK.ItcastOA.Model
{
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
public partial class UserInfo
{
public UserInfo()
{
this.R_UserInfo_ActionInfo = new HashSet<R_UserInfo_ActionInfo>();
this.Department = new HashSet<Department>();
this.RoleInfo = new HashSet<RoleInfo>();
} public int ID { get; set; }
public string UName { get; set; }
public string UPwd { get; set; }
public System.DateTime SubTime { get; set; }
public short DelFlag { get; set; }
public System.DateTime ModifiedOn { get; set; }
public string Remark { get; set; }
public string Sort { get; set; } [JsonIgnore]
public virtual ICollection<R_UserInfo_ActionInfo> R_UserInfo_ActionInfo { get; set; }
[JsonIgnore]
public virtual ICollection<Department> Department { get; set; }
[JsonIgnore]
public virtual ICollection<RoleInfo> RoleInfo { get; set; }
}
}

但需要把引用以及

[JsonIgnore]
public virtual ICollection<R_UserInfo_ActionInfo> R_UserInfo_ActionInfo { get; set; }
[JsonIgnore]
public virtual ICollection<Department> Department { get; set; }
[JsonIgnore]
public virtual ICollection<RoleInfo> RoleInfo { get; set; }

加入T4 模板中。

这样在应用反序列化时,无法拿到导航属性,只能再次查找数据库!

----------------------------------------------------------------------------------------------

如果用微软自带的序列化解决办法

序列化类型为xxx的对象时检测到循环引用解决方法

方法一:关闭导航功能(不能再使用导航属性)

public ActionResult Index()
{
testContext context = new testContext();
context.Configuration.ProxyCreationEnabled = false;
var data = context.People;
return Json(data, JsonRequestBehavior.AllowGet);
}

方法二:转为匿名对象

public ActionResult Index()
{
testContext context = new testContext();
var data = context.People.Select(item => new { item.Id, item.Name });
return Json(data, JsonRequestBehavior.AllowGet);
}

Newtonsoft.Json高级用法

Json.net对于导航属性的处理(解决对象循环引用)的更多相关文章

  1. 解决FastJson循环引用的问题

    temp 本来被循环引用,运行方法报错. 解决方法:对temp进行处理 SerializerFeature feature = SerializerFeature.DisableCircularRef ...

  2. 解决NSTimer循环引用Retain Cycle问题

    解决NSTimer循环引用Retain Cycle问题 iOS开发中以下的情况会产生循环引用 block delegate NSTimer 循环引用导致一些对象无法销毁,一定的情况下会对我们横须造成影 ...

  3. 解决NSTimer循环引用

    NSTimer常见用法 @interface XXClass : NSObject - (void)start; - (void)stop; @end @implementation XXClass ...

  4. 用block解决nstimer循环引用

    大多数开发者可能都会这样来实现定时器.创建定时器的时候,由于目标对象是self,所以要保留此实例.然而,因为定时器是用实例变量存放的,所以实例也保留了定时器,这就造成了循环引用.除非调用stop方法, ...

  5. 05解决flask循环引用的问题

    1, 什么是循环引用问题?为什么会导致循环引用? 1.1先讲是什么? 主文件中class类过多会导致主文件冗余,如下图,所以我们单独给class类一个文件,然后再引用它. 1.2再讲为什么? 主文件为 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (24) ------ 第五章 加载实体和导航属性之查询内存对象

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-4  查询内存对象 问题 你想使用模型中的实体对象,如果他们已经加载到上下文中, ...

  7. ASP.NET Core EF 查询获取导航属性值,使用Include封装

    // 引用 using Microsoft.EntityFrameworkCore; // 摘要: // Specifies related entities to include in the qu ...

  8. Json.NET如何避免循环引用

    Json.NET在将对象序列化为Json字符串的时候,如果对象有循环引用的属性或字段,那么会导致Json.NET抛出循环引用异常. 有两种方法可以解决这个问题: 1.在对象循环引用的属性上打上[Jso ...

  9. Block的使用及循环引用的解决

    Block是一个很好用的东西,这篇文章主要来介绍:1.什么是Block?2.Block的使用?3.Block的循环引用问题及解决. 1.什么是Block? 说这个问题之前,我先来说一下闭包(Closu ...

随机推荐

  1. 【Go语言】I/O专题

    本文目录 1.bytes包:字节切片.Buffer和Reader 1_1.字节切片处理函数 1_1_1.基本处理函数 1_1_2.字节切片比较函数 1_1_3.字节切片前后缀检查函数 1_1_4.字节 ...

  2. 使用css让XML文件按照HTML的风格显示出来

    attrib.css name { display:block; color:blue; font-size:20pt; font-weight:bold; } id,company,email,te ...

  3. 【LeetCode】1. Two Sum

    题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...

  4. Java web MVC开发模式入门感悟

    当我进行第一个完整的java web项目的开发时,对以前所学的Java web知识体系有了一个清晰的进阶认识.我觉得非常有必要对此进行必要的总结. MVC,意指model(数据持久层)+viewer( ...

  5. 将gridFS中的图片文件写入硬盘

    开启用户验证下的gridfs 连接使用,在执行脚本前可以在python shell中 from pymongo import Connectionfrom gridfs import *con = C ...

  6. ubuntu下neural-style-master的demo

    1.Installing Torch 参考官网:http://torch.ch/docs/getting-started.html git clone https://github.com/torch ...

  7. JS读写cookie以及中文乱码解决

    本文地址:http://www.cnblogs.com/PiaoMiaoGongZi/p/4092489.html 转载请注明. Js获取所有的cookie信息: var cookiename = d ...

  8. Linux 搭建svn服务器

    一.安装svn服务器端yum install subversion      从镜像下载安装svn服务器端 如果后面执行“svnadmin create /usr/local/svn/sunny”提示 ...

  9. JAVA程序设计 实验一

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1353  姓名:李海空  学号:20135329 成绩:             指导教师:娄嘉鹏 ...

  10. String-原型属性

    <script> /*将trim方法定义到字符串对象中 *使用字符串的原型属性来完成 *原型prototype:就是该对象的一个描述,该描述中如果添加新功能,那么该对象就具备这些新功能. ...