Json.net对于导航属性的处理(解决对象循环引用)
来源:互联网 发布:大数据技术培训 编辑:程序博客网 时间:2024/06/06 01:51
摘自:http://www.cnblogs.com/ecollab/p/6159914.html
对于两张表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);}
0 0
- Json.net对于导航属性的处理(解决对象循环引用)
- 解决fastjson内存对象重复/循环引用json错误
- 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题(Newtonsoft.Json)
- 循环引用的处理
- 采用CXF解决webservice循环引用对象的问题
- 采用CXF解决webservice循环引用对象的问题
- 【已解决】VS错误 CS0120对象引用对于非静态的字段、方法或属性“AgvWareHouseLib.Offline(string, string)”是必需的
- 解决json-lib的一些序列化循环处理问题
- nodejs对于json数据的引用
- ARC之解决对象之间的循环强引用(Swift)
- 关于FastJson的一些问题的处理(时间问题 ,转换json重用对象引用问)
- 关于retain循环引用对象解决图解
- javascript中的循环引用对象处理
- .Net对于源代码的处理
- JavaScript中几种常用的解决for循环中引用同一循环变量对象的方法
- ajaxfileupload对于json格式处理的问题(firefox、ie)
- ajaxfileupload对于json格式处理的问题(firefox、ie)
- 朴素贝叶斯法(对于连续和离散属性的处理)
- dp——洛谷P2679子串
- 操作系统概论
- node express webpack使用proxyTable
- 知乎产品分析|知识社区何去何从
- LeetCode算法题目:Validate Binary Search Tree
- Json.net对于导航属性的处理(解决对象循环引用)
- 网络上找到的socket5 udp c++ 代码 可供参考
- 一个很不错的AspectJ的Execution表达式说明
- Oracle trunc()截取函数的用法
- Scrapy爬虫,Python2将Unicode编码装换成UTF-8编码解决方法之一
- IMWeb训练营作业
- Java经典面试题
- Canvas 常用API总结
- Dialog的基本使用