Json.net对于导航属性的处理(解决对象循环引用)
对于两张表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对于导航属性的处理(解决对象循环引用)的更多相关文章
- 解决FastJson循环引用的问题
temp 本来被循环引用,运行方法报错. 解决方法:对temp进行处理 SerializerFeature feature = SerializerFeature.DisableCircularRef ...
- 解决NSTimer循环引用Retain Cycle问题
解决NSTimer循环引用Retain Cycle问题 iOS开发中以下的情况会产生循环引用 block delegate NSTimer 循环引用导致一些对象无法销毁,一定的情况下会对我们横须造成影 ...
- 解决NSTimer循环引用
NSTimer常见用法 @interface XXClass : NSObject - (void)start; - (void)stop; @end @implementation XXClass ...
- 用block解决nstimer循环引用
大多数开发者可能都会这样来实现定时器.创建定时器的时候,由于目标对象是self,所以要保留此实例.然而,因为定时器是用实例变量存放的,所以实例也保留了定时器,这就造成了循环引用.除非调用stop方法, ...
- 05解决flask循环引用的问题
1, 什么是循环引用问题?为什么会导致循环引用? 1.1先讲是什么? 主文件中class类过多会导致主文件冗余,如下图,所以我们单独给class类一个文件,然后再引用它. 1.2再讲为什么? 主文件为 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (24) ------ 第五章 加载实体和导航属性之查询内存对象
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-4 查询内存对象 问题 你想使用模型中的实体对象,如果他们已经加载到上下文中, ...
- ASP.NET Core EF 查询获取导航属性值,使用Include封装
// 引用 using Microsoft.EntityFrameworkCore; // 摘要: // Specifies related entities to include in the qu ...
- Json.NET如何避免循环引用
Json.NET在将对象序列化为Json字符串的时候,如果对象有循环引用的属性或字段,那么会导致Json.NET抛出循环引用异常. 有两种方法可以解决这个问题: 1.在对象循环引用的属性上打上[Jso ...
- Block的使用及循环引用的解决
Block是一个很好用的东西,这篇文章主要来介绍:1.什么是Block?2.Block的使用?3.Block的循环引用问题及解决. 1.什么是Block? 说这个问题之前,我先来说一下闭包(Closu ...
随机推荐
- 让wego微购购物分享系统采集拍拍数据功能之腾讯paipai功能采集插件
wego是一款很不错的导购系统,无论前后台设计风格和功能都还不错,可有时我们的确需要一些自定义的功能,毕竟万千世界,大家都做一样的东西,采集同样的数据,能不烦吗?哈哈,今天就奉献上一个wego拍拍采集 ...
- 李洪强漫谈iOS开发[C语言-052]-for循环
- 满足要求的最长上升子序列(nlogn)
题意:数列A1,A2,...,AN,修改最少的数字,使得数列严格单调递增.(1<=N<=10^5; 1<=Ai<=10^9 ) 思路:首先要明白的一点是数列是严格单调递增,那么 ...
- generator自动生成mybatis配置和类信息
generator自动生成mybatis的xml配置.model.map等信息: 1.下载mybatis-generator-core-1.3.2.jar包. 网址:http://cod ...
- php session详解
<?php /* * session_abort — Discard session array changes and finish session 舍弃会话序列变化和结束会话 session ...
- uglifyjs压缩批处理
uglifyjs. 据说是用来压缩JS文件的,据说还能优化JS,据说是基于node的,还据说比Google Closure Compiler更带感. uglifyjs压缩批处理我们不可能每次都打开cm ...
- 蓝牙协议栈记录—BTStack
TSTack User Guid 翻译过来的 1.简介 2.BTStack 架构 BTStack在所实现的协议和服务之间采用很多状态机实现相互作用,特点: <1>单线程.BTStack只有 ...
- Java 实现MapReduce函数
明白了MapReduce程序的工作原理之后,下一步就是写代码来实现它.我们需要三样东西:一个map函数.一个reduce函数和一些用来运行作业的代码.map函数由Mapper类来表示,后者声明一个ma ...
- oracle从零开始学习笔记 二
多表查询 等值连接(Equijoin) select ename,empno,sal,emp.deptno from emp,dept where dept.deptno=emp.deptno; 非等 ...
- 如何查看JDK以及JAVA框架的源码
如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> &q ...