1.在使用EF时,由于数据库主外键关联,将对象进行Json序列化时会遇到循环引用的问题

//EF 中由于数据库主外键关联,对象的序列化经常出现循环引用问题
//使用.Net 自带的序列化工具,序列化出现循环引用问题
List<student> list = _Context.students.ToList();
JavaScriptSerializer ser = new JavaScriptSerializer();
string str = ser.Serialize(list);
Console.WriteLine(str);

解决方案1:使用Newtonsoft.Json工具序列化,忽略循环引用

使用方式1:

//使用Newtonsoft 的序列化工具,可以设置忽略循环引用 方法1
//但是还有有循环结构数据的转化,只是循环的级数固定了
List<student> list = _Context.students.Where(q => q.sno == "").ToList();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Ignore;
//settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
string result = JsonConvert.SerializeObject(list, settings);
Console.WriteLine(result);

使用方式2:

//使用Newtonsoft 的序列化工具,可以设置忽略循环引用,方法2
//但是还有有循环结构数据的转化,只是循环的级数固定了
List<student> list = _Context.students.Where(q => q.sno == "").ToList();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
JsonSerializer ser = JsonSerializer.Create(settings);
using (StringWriter sw = new StringWriter())
{
ser.Serialize(sw, list);
Console.WriteLine(sw.ToString());
}

解决方案2:使用Newtonsoft.Json中的方法注释,在Json序列化的时候忽略关联属性

重点设置忽略方法注释:

[JsonIgnore]
public virtual ICollection<score> scores { get; set; }

默认序列化的时候就会过滤掉Ignore的

//使用Newtonsoft 的序列化工具,可以设置忽略循环引用 方法3(推荐)
//本方法结合方法注释 [JsonIgnore] ,就是在Json序列化的时候,忽略[JsonIgnore]指定的属性
//这个方法相对比较常用
List<student> list = _Context.students.Where(q => q.sno == "").ToList();
string result = JsonConvert.SerializeObject(list);
Console.WriteLine(result);
//还可以显示指定忽略
List<student> list = _Context.students.Where(q => q.sno == "").ToList();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Ignore;
string result = JsonConvert.SerializeObject(list, settings);
Console.WriteLine(result);

EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json的更多相关文章

  1. 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json

    1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...

  2. Json序列化之.NET开源类库Newtonsoft.Json的研究

     一.Json简介 JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文 ...

  3. C# Json 序列化和反序列化 工具类 Newtonsoft.Json.dll

    引用: Newtonsoft.Json.dll // 引用: using Newtonsoft.Json; using Newtonsoft.Json.Converters; // 定义 实体测试类 ...

  4. Json序列化之.NET开源类库Newtonsoft.Json

    上代码: using System; using System.Collections; using System.Collections.Generic; using System.IO; usin ...

  5. 用JSON.stringify处理循环引用对象

    通常,我们会用JSON.stringify把Javascript对象序列化成JSON格式,这在大多数情况下是够用的.但是,当你要转换的对象里存在循环引用时,问题就来了. js对象循环引用导致内存泄漏 ...

  6. 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题

    先看一个T4模板生成的model实体类 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:卷猫 链接:http://anneke.cn/ArticleInfo/Detial ...

  7. EF 序列化实体为Json时的循环引用问题(不用自己写实体,不用匿名类型,不用EF的上下文属性)

    自己写实体可以完美解决这个问题.(支持时间格式自定义) 用匿名类型也可以. 设置上下文方法如下: (jz为数据库上下文对象) jz.Configuration.ProxyCreationEnabled ...

  8. 一个C#序列化时循环引用的问题

    以前一直没搞懂为什么C#在做对象序列化时(Json序列化,XML序列化等)有时候会出现循环引用的问题,下面写了个例子,类People有一个属性引用了类Child,而类Child也有一个属性引用了类Pe ...

  9. lua序列化(支持循环引用)

    lua序列化 支持key类型为string, number 支持value类型为string, number, table, boolean 支持循环引用 支持加密序列化 支持loadstring反序 ...

随机推荐

  1. java List集合中contains方法总是返回false

    ArrayList的contains方法 java 今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList 但在调用list.contains( ...

  2. echarts 中文API

    http://echarts.baidu.com/echarts2/doc/doc.html#Toolbox

  3. Unable to start a VM due to insufficient capacity

    今天cloudstack中的一个普通用户创建虚拟机时,总是报错:Unable to start a VM due to insufficient capacity ,看management and a ...

  4. day45

    今日内容 1.css三种引入方式 2.三种引入方式的优先级 3.长度及颜色单位 4.常用样式 5.css选择器 CSS三种引入方式 1.1css引入方式之行间式 ​ 行间式(特点): ​ 1.标签头部 ...

  5. STM32 CAN总线标识符过滤器难点解析

    STM32 CAN总线标识符过滤器难点解析 原创 2016年05月31日 15:12:24 标签: stm32 / CAN 4910 CAN总线是目前应用非常多的一种总线,在汽车电子,航空航天中应用广 ...

  6. 【第四课】Linux的基础命令使用

    目录 一.passwd重置密码 二.单用户模式 三.救援模式 四.设置SElinux 五.Linux的常用基础命令详解 5.1.mkdir命令 5.2.ls命令 5.3.cd命令 5.4.chmod命 ...

  7. asp.net mvc2+nhibernate实体类映射问题之“尝试创建Controller类型的控制器时出错请确保控制器具有无参数公共构造函数”

    程序出了问题,解决后发现如此简单,犯的错误是如此的低级啊,特此记录! 运行程序总是在浏览器中看到一片空白,什么也没有,用application_error跟踪发现抓出一个这样的异常 然后浏览器中就是这 ...

  8. 软件测试 —— Bug

    [Bug规范] Bug标题中需包含Bug的具体位置并以[]标注 举例:[模块-子模块-页面]XXXXXXXXXXXX Bug标题尽量简明 做什么操作 + 出现什么结果,比如(点击提交按钮,出现卡顿现象 ...

  9. RyuBook1.0案例二:Traffic Monitor项目源码分析

    Traffic Monitor源码分析 从simple_switch_13.SimpleSwitch13控制器继承并开发 class SimpleMonitor13(simple_switch_13. ...

  10. Overlay技术