首页 > 其他分享 >关联数据和序列化

关联数据和序列化

时间:2024-03-27 21:55:05浏览次数:19  
标签:... System 关联 Json 循环 NET 序列化 数据

由于 EF Core 会自动修正导航属性,因此在对象图中可能会产生循环引用。 例如,加载博客及其关联文章会生成引用文章集合的博客对象。 其中每篇文章将返回引用该博客。

某些序列化框架不允许使用循环引用。 例如,Json.NET 在发现循环引用的情况下,会引发以下异常。

Newtonsoft.Json.JsonSerializationException:为“MyApplication.Models.Blog”类型的“Blog”属性检测到自引用循环。

如果发现循环,System.Text.Json 将引发类似的异常。

System.Text.Json.JsonException:检测到可能的对象循环。 这可能是由于循环造成的,或者是因为对象深度大于允许的最大深(即 32)。 请考虑在 JsonSerializerOptions 上使用 ReferenceHandler.Preserve 来支持循环。

如果使用的是 ASP.NET Core 中的 Json.NET,可以将 Json.NET 配置为忽略在对象图中找到的循环。 此配置是通过 Startup.cs 中的 ConfigureServices(...) 方法完成的。

C#

复制
public void ConfigureServices(IServiceCollection services)
{
...

services.AddMvc()
    .AddJsonOptions(
        options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
    );

...

}
如果使用 System.Text.Json,可按如下所示对其进行配置。

C#

复制
public void ConfigureServices(IServiceCollection services)
{
...

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
    });

...

}
另一种替代方法是忽略导致 JSON 序列化循环的导航属性。 如果使用 Json.NET,可以使用 [JsonIgnore] 特性修饰其中一个导航属性,该特性指示 Json.NET 在序列化时不遍历该导航属性。 对于 System.Text.Json,可以使用 System.Text.Json.Serialization 命名空间中的 [JsonIgnore] 特性来实现相同的效果。

标签:...,System,关联,Json,循环,NET,序列化,数据
From: https://www.cnblogs.com/zy8899/p/18100360

相关文章

  • EF Core中数据的预先加载
    预先加载可以使用Include方法来指定要包含在查询结果中的关联数据using(varcontext=newBloggingContext()){varblogs=context.Blogs.Include(blog=>blog.Posts).ToList();} 可以在单个查询中包含多个关系的关联数据。C#using(varcontext......
  • Fiddler(5)Statistics数据统计面板性能分析,Inspectors查看请求与响应
    Statistics数据统计面板,性能分析 重点:主要关注RTT,体现一个请求从发送到返回响应的时间反映一个请求的性能指标,其中主要需要关注RTT会展示全世界范围的请求平均数据showchart按钮,从饼状图中分别出哪些资源的请求耗时最多,从而对页面的访问进行访问速度优化Inspectors查......
  • Scala第十二章节(Source读取数据的功能、写入数据的功能以及学员成绩表案例)
    章节目标掌握Source读取数据的功能掌握写入数据的功能掌握学员成绩表案例1.读取数据在Scala语言的Source单例对象中中,提供了一些非常便捷的方法,从而使开发者可以快速的从指定数据源(文本文件,URL地址等)中获取数据,在使用Source单例对象之前,需要先导包,即......
  • 大数据开发之CDH使用搭建大数据平台
    大数据开发之CDH使用搭建大数据平台1、CDH介绍它是Cloudera公司提供的一种大数据平台解决方案。CDH的全称是Cloudera’sDistributionincludingApacheHadoop,它是一个开放源代码的大数据平台,基于ApacheHadoop和其他相关的开源技术构建,包括HDFS、MapReduce、HBase、ZooKee......
  • python笔记(3)基本数据类型简介
    目录python3的六个标准数据类型Numbers(数字) 数值运算String(字符串)List(列表)Tuple(元组)Sets(集合)set()函数有两用方式使用set运算Dictionaries(字典)python3的六个标准数据类型Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionaries(字典)Set(集合)......
  • Mysql数据库——高级SQL语句补充
    目录一、子查询——Subquery1.环境准备 2.In——查询已知的值的数据记录2.1子查询——Insert2.2子查询——Update2.3子查询——Delete3.NotIn——表示否定,不在子查询的结果集里3.Exists——判断查询结果集是否为空4.子查询——别名二、视图——View1.视图与表的联......
  • linux 中实现数据按照指定行号顺序输出
     001、测试数据[root@pc1test01]#lsa.txtidx.txt[root@pc1test01]#cata.txt##测试数据01020304050610708091011122131415161718319202122232442526272829305313233343536637383940414274344454647......
  • 语法回顾-《Verilog编程艺术》之数据类型
    目录线网(net)变量(variable)线网和变量的区别向量数组参考《Verilog编程艺术》魏家明著线网(net)用于表示结构体(如逻辑门)之间的连接。除了trireg之外,所有其他的线网类型都不能保存值,线网的值是由driver决定的。例如由连续赋值驱动或由逻辑门驱动。如果driver没有驱动线......
  • 【Python】Python基本数据类型(超详细)
    前言在上一篇文章我们简单介绍了一下Python,本章我们就开始正式学习Python,在此之前,考虑到Python环境有的小伙伴可能没有,所有我开了一个QQ群,里面有代码编辑器(PyCharm)的安装与破解使用,如果有大佬需要的话可以加群自行安装,这个群创建的目的也是方便各位讨论技术,QQ群号:455341......
  • 数据结构——栈(C语言版)
    前言:在学习完数据结构顺序表和链表之后,其实我们就可以做很多事情了,后面的栈和队列,其实就是对前面的顺序表和链表的灵活运用,今天我们就来学习一下栈的原理和应用。准备工作:本人习惯将文件放在test.c、SeqList.c、SeqList.h三个文件中来实现,其中test.c用来放主函数,SeqList.c......