首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在ASP.NET Core2.1中使用System.Text.Json作为默认序列化程序

在ASP.NET Core 2.1中,默认的JSON序列化程序是Newtonsoft.Json(也称为Json.NET)。然而,从.NET Core 3.0开始,Microsoft引入了System.Text.Json作为新的默认JSON序列化程序。尽管ASP.NET Core 2.1默认使用Newtonsoft.Json,但你仍然可以将其配置为使用System.Text.Json

基础概念

System.Text.Json 是.NET Core的一部分,旨在提供高性能、低分配的JSON序列化和反序列化。它支持JSON Schema验证,并且可以与Utf8JsonReaderUtf8JsonWriter一起使用以实现高效的流式处理。

优势

  1. 性能System.Text.Json通常比Newtonsoft.Json更快,尤其是在处理大量数据时。
  2. 内存效率:它设计为低分配,有助于减少垃圾回收的压力。
  3. 内置UTF-8支持:与Utf8JsonReaderUtf8JsonWriter结合使用时,可以实现高效的UTF-8序列化和反序列化。
  4. 安全性:它默认禁用一些可能导致安全问题的功能,如动态代码生成。

类型

System.Text.Json支持多种类型的数据序列化和反序列化,包括基本类型(如int, string, bool)、集合类型(如List<T>, Dictionary<TKey, TValue>)、自定义对象等。

应用场景

  • Web API:在构建高性能的RESTful服务时,System.Text.Json是一个很好的选择。
  • 微服务架构:由于其性能优势,它特别适合需要快速响应时间的微服务。
  • 数据交换:在客户端和服务器之间传输JSON数据时,System.Text.Json可以提供更好的性能和效率。

配置ASP.NET Core 2.1使用System.Text.Json

要在ASP.NET Core 2.1中使用System.Text.Json,你需要手动配置它作为默认的JSON序列化程序。以下是如何做到这一点的示例:

代码语言:txt
复制
public void ConfigureServices(IServiceCollection services)
{
    // 移除默认的Json.NET服务
    services.RemoveJsonOptions();

    // 添加System.Text.Json作为默认的JSON序列化程序
    services.AddControllers()
            .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
                options.JsonSerializerOptions.IgnoreNullValues = true;
                // 其他配置选项...
            });
}

遇到的问题及解决方法

问题:在使用System.Text.Json时,可能会遇到属性名称不匹配的问题,因为默认情况下,它使用驼峰命名法(camelCase)而不是PascalCase。

解决方法:可以通过配置JsonSerializerOptions来指定属性命名策略:

代码语言:txt
复制
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;

或者,如果你希望保持PascalCase,可以这样做:

代码语言:txt
复制
options.JsonSerializerOptions.PropertyNamingPolicy = null;

问题System.Text.Json默认情况下不支持某些Newtonsoft.Json的特性,如自定义转换器。

解决方法:你可以创建自定义的JsonConverter<T>并将其添加到序列化选项中:

代码语言:txt
复制
public class MyCustomConverter : JsonConverter<MyType>
{
    public override MyType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // 实现反序列化逻辑
    }

    public override void Write(Utf8JsonWriter writer, MyType value, JsonSerializerOptions options)
    {
        // 实现序列化逻辑
    }
}

// 在配置中添加自定义转换器
options.JsonSerializerOptions.Converters.Add(new MyCustomConverter());

通过这种方式,你可以在ASP.NET Core 2.1中充分利用System.Text.Json的优势,同时解决可能遇到的问题。

相关搜索:在ASP.NET Core2.1中使用带有MVC视图的ValidateModelAttribute使用OpenIdDict在ASP.Net Core2.1中获取来自谷歌的声明在ASP.NET Core3.0中使用System.Text.Json格式化DateTime在使用ASP.NET API Core2.1时如何在MongoDB中操作多个集合在Django Rest Framework序列化程序中设置DateField默认值在ASP.NET Core2.1中将Neo4j驱动程序实例放在哪里?我们可以在序列化程序类本身中强制使用序列化程序字段吗?是否可以在解决方案中将angular或react添加到现有的asp.net Core2.1应用程序中作为独立项目?在SQL Server中插入不使用空白作为默认值在.NET Core3.1中使用System.Text.Json进行反序列化会导致空属性值在JSONCore3中使用System.Text.JSON :决定在端点上使用漂亮的ASP.NET输出吗?使用Meta和查询参数中的默认字段创建Django序列化程序如何使用.NET Core2.1中的Process.Start使用默认程序打开网络共享驱动器上的文件在python2中,使用字典作为一行程序填充方法中的默认变量使用前面在文件中读取的默认值在Java中反序列化YAML使用Python在默认应用程序中打开文档在应用程序中同时使用nanopb和protobuf进行序列化/反序列化在ASP.NET MVC 2中,我可以使用默认的ModelBinder将查询字符串反序列化为数组吗?在ASP.NET Core2.1中的应用程序启动时调用非静态类来设定数据库种子如何使用泛型ListCreateAPIView在嵌套序列化程序中创建用户?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET Core Web API设置响应输出的Json数据格式的两种方式

前言 在ASP.NET Core Web API中设置响应输出Json数据格式有两种方式,可以通过添加System.Text.Json或Newtonsoft.JsonJSON序列化和反序列化库在应用程序中全局设置接口响应的...JSON序列化和反序列化库 System.Text.Json System.Text.Json是 .NET Core 3.0 及以上版本中内置的 JSON 序列化和反序列化库。...Newtonsoft.Json Newtonsoft.Json是一个功能强大且灵活的.NET JSON序列化和反序列化库,用于在.NET应用程序中处理JSON数据。...设置Json统一格式需求 修改属性名称的序列化方式,在.Net Core中默认使用小驼峰序列化Json属性参数,前端想要使用与后端模型本身命名格式输出(如:UserName)。...说明 在.NET 3.0及其以上的版本使用Newtonsoft.Json需要通过安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包来进行配置(注意假如提示该包安装失败可以尝试安装其他版本的包

88410
  • 如何创建一个自定义的`ErrorHandlerMiddleware`方法

    所有的.NET应用程序都有可能会产生错误,并且不幸地引发异常,因此在ASP.NET中间件管道中处理这些异常显得非常重要。...这是从ASP.NET Core 3.x(在某种程度上在2.2版中)的Web API返回错误消息的普遍支持的方法。 我们将从在静态帮助器类中定义UseCustomErrors函数开始。...然后,它使用System.Text.Json序列化程序将对象写入Response流。...如果您的应用程序现在在Development环境中引发异常,则您将在响应中获取作为JSON返回的完整异常: ? 在生产环境中,您仍然会得到ProblemDetails响应,但是省略了详细信息: ?...我最后展示了一个示例处理程序,该处理程序将ProblemDetails对象序列化为JSON,包括Development环境中的详细信息,并在其他环境中将其排除在外。

    2.2K10

    Unity3D网络通讯(一)--Asp.Net Core WebApi创建发布注意事项

    结果在创建后调用Get方法时是接收不到数据的,这篇主要就是说一下创建及发布过程中遇到的问题和解决方法。 01 Api简单介绍 ? 我们默认创建了一个.Net Core的项目 ? ?...配置应用程序池 我们创建了一个NetCoreWebTest的网站,在IIS创建网站这块我就不多说了。 ? 如上图,要注意的点里面在应用程序池中我们的.Net CLR的版本要改为无托管代码。...默用的Json序列化组件是JsonUnity,它对大小写比较敏感,而NetCore3.1之后默认的序列化组件改为了System.Text.Json,序列化的默认行为有变。...默认的System.Text.Json与Newtonsoft.Json的序列化对比,可以看到默认的System.Text.Json中把我们类属性全都转为小写了,而用了Newtonsoft.Json后还是按类属性的原值输出的...改为NewtonsoftJson后,Unity3D使用JsonUnity也可以正常反序列化了。 Controller代码 ?

    1.5K10

    ASP.NET Core 3.0 的新增功能

    使用各种现代的技术,例如: 通过 HTTP/2 传输 使用 Protocol Buffers 作为接口描述语言 二进制序列化格式 提供以下功能: 身份验证 双向的数据流与流程控制 取消与超时 ASP.NET...SignalR 现在使用 System.Text.Json 来序列化/反序列化 JSON 消息。...新的 JSON 序列化 现在默认情况下,ASP.NET Core 3.0 使用 System.Text.Json 进行 JSON 序列化: 异步读取和写入 JSON。...IIS 中改进了的错误报告 现在,在 IIS 中托管 ASP.NET Core 应用程序时的启动错误会生成更丰富的诊断数据。这些错误会在适用的情况下使用堆栈跟踪,报告给 Windows 事件日志。...ASP.NET Core 3.0 引入了 System.Text.Json 来读写 JSON。有关更多信息,请参阅本文档中新的 JSON 序列化。

    6.8K30

    System.Text.Json 自定义 Conveter

    System.Text.Json 自定义 Conveter Intro System.Text.Json 作为现在 .NET 默认提供的高性能 JSON 序列化器,对于一些比较特殊类型支持的并不太好,业务需求中总是有各种各样的需要...如果 Id 只会是整数或者整数的字符串,那么我们就可以用 int 来表示,System.Text.Json 从 5.0 开始支持解析带引号的数字,也就是数字的字符串形式可以参考:https://github.com.../dotnet/runtime/issues/30255,只需要配置 JsonNumberHandling, 在 ASP.NET Core 中默认是启用的,是可以把 "1" 反序列化成一个 int 类型的...Name { get; set; } } 但是如果是上面第一种形式的 JSON 反序列化时会发生错误,异常如下: 所以还需要自定义一个 Converter 来支持将数字转换成一个字符串,Converter...Converter 的方式有两种,一种是在某个属性上添加 JsonConverter 来使用,另一种是作为全局 Converter 来使用,直接配置 JsonSerializerOptions 中的

    64640

    System.Text.Json自定义Conveter

    System.Text.Json是.NET中提供的高性能 JSON 序列化器,但是它对于比较特殊的类型支持并不好,然而在实际项目中的需求总是各种各样的,很多时候我们需要自定义Converter ,并且微软新出的...如果id只是int或是可以转换为int的字符串,那么我们可以用int来表示,这是因为System.Text.Json已经支持解析带引号的数字,只需要配置JsonNumberHandling即可, 这个功能在...ASP.NET Core中是默认是开启的。...Name { get; set; } } 但是如果我们的json是这种的{"Id": 1, "Name": "Test"},JSON在反序列化的时候时会报错。...Converter有两种方法,一个是在属性上添加JsonConverter,另一个是作为全局Converter使用,直接在JsonSerializerOptions中配置Converter。

    33920

    不安装运行时运行 .NET 程序 - NativeAOT

    Console App 我们新建一个控制台程序,目标框架选择 NET7 (如果使用正式版的 VS2022 没有办法选择 net7 ,可以直接编辑 csproj 文件),右键项目选择“编辑项目文件”,在...以下代码是默认生成的 WeatherForecastController 的 GET 方法,这个方法是个标准的同步方法,进行 AOT 发布后序列化没有任何问题。...AOT 发布后运行,访问对应的接口程序不会有任何报错,但是返回值是个空对象的json: {} 尝试修复该问题,并没有特别的好办法,目前能够勉强使用的办法是使用 System.Text.Json source...我想序列化的问题大概也就是出在这里,因为传统的序列化需要大量的使用动态生成代码技术。 总结 通过以上我们对 .NET 上最常用的几种程序进行了 Native AOT 发布的测试。...总体来说控制台跟ASP.NET CORE 项目能用,WINFROM 跟 WPF 不能用。比较遗憾的有两个点: ASP.NET COER 在序列化方面貌似还有点小问题。

    1.3K20

    猿学-讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

    (注:文章是18年2月份的,所以文章提到了core2.1还没发布)。 0....(框架也有其他方法来获取程序里面的Controller,所以,这个ControllerAttribute不是必须的)。...ASP.NET Core MVC里面有一个比较令人恼怒的问题你需要手动给参数指定[FromBody]这个特性,以便让系统知道如何从Request body里面反序列化他们,比如反序列化json。...除此之外,如果一个参数在route里面定义了,他会自动从先从path,也就是url上尝试绑定,不行的话会去从查询参数上绑定。IFormFlie默认从form表单上绑定获取。...集中的路由机制不会应用在API controller,框架要求只能使用基于特性的路由,即在action上指定[Route("XXX")]的方式。 5.

    1K00

    讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

    (注:文章是18年2月份的,所以文章提到了core2.1还没发布)。 0....(框架也有其他方法来获取程序里面的Controller,所以,这个ControllerAttribute不是必须的)。...ASP.NET Core MVC里面有一个比较令人恼怒的问题你需要手动给参数指定[FromBody]这个特性,以便让系统知道如何从Request body里面反序列化他们,比如反序列化json。...除此之外,如果一个参数在route里面定义了,他会自动从先从path,也就是url上尝试绑定,不行的话会去从查询参数上绑定。IFormFlie默认从form表单上绑定获取。...集中的路由机制不会应用在API controller,框架要求只能使用基于特性的路由,即在action上指定[Route("XXX")]的方式。 5.

    72320

    .NET 中的 Json 使用体验

    本文主要总结介绍 .NET 中的对 Json 数据使用在使用过程中的关于编码、循环引用、时间格式化的一些问题 背景 第一次接触 .Net 是2012年刚进入大学时,之后也一直作为桌面编程语言来使用。...当然在各种项目的使用中也或多或少出现了各种问题,现将使用 Json 格式相关的内容总结下来以供大家参考。...问题概览 中文 Unicode 和 字符转义 问题 中文 Unicode 这个问题在 ASP.NET Core 的返回中正常并不会出现,而是在控制台中使用 JsonSerializer.Serialize...字符转义问题在 ASP.NET Core 的返回中正常并不会出现,而是在控制台中使用时,这个和上一个问题类似。....NET 7 的当前预览版中,已经支持了 TimeOnly 和 DateOnly 的直接序列化 https://github.com/dotnet/runtime/pull/69160。

    1.5K30

    讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

    (注:文章是18年2月份的,所以文章提到了core2.1还没发布)。 0....(框架也有其他方法来获取程序里面的Controller,所以,这个ControllerAttribute不是必须的)。...ASP.NET Core MVC里面有一个比较令人恼怒的问题你需要手动给参数指定[FromBody]这个特性,以便让系统知道如何从Request body里面反序列化他们,比如反序列化json。...除此之外,如果一个参数在route里面定义了,他会自动从先从path,也就是url上尝试绑定,不行的话会去从查询参数上绑定。IFormFlie默认从form表单上绑定获取。...集中的路由机制不会应用在API controller,框架要求只能使用基于特性的路由,即在action上指定[Route("XXX")]的方式。 5.

    67220

    .NETCore3.1中的Json互操作最全解读-收藏级

    ,中文被转义了,这就是接下来要解决的问题 字符转义的问题 在默认情况下,System.Text.Json 序列化程序对所有非 ASCII 字符进行转义;这就是中文被转义的根本原因。...在默认情况下,所有公共属性将被序列化为JSON。...在反序列化的时候,允许 JSON 文本包含注释 默认情况下,System.Text.JSON 不支持源JSON 文本包含注释,比如下面的代码,当你不使用 ReadCommentHandling = JsonCommentHandling.Skip...转换器 System.Text.Json 内置了各种丰富的类型转换器,这些默认的转换器在程序初始化 JsonSerializerOptions 的时候就默认加载,在 JsonSerializerOptions...内置了各种各样丰富的类型转换器,但是在各种业务开发的过程中,总会根据业务需求来决定一些特殊的数据类型的数据,下面,我们就以经典的日期/时间转换作为演示场景。

    2.7K21

    ASP.NET Core 各版本特性简单整理

    使用 ASP.NET Core,您可以: 生成 Web 应用和服务、物联网 (IoT)应用和移动后端。 在 Windows、macOS 和 Linux 上使用喜爱的开发工具。 部署到云或本地。...在.NET Core上运行。 相关:在 ASP.NET 4.x 和 ASP.NET Core 之间进行选择 ?...Core 3.0 的新增功能 新增功能: Blazor Server Blazor WebAssembly Razor 组件 gRPC ASP.NET Core 和 SignalR 默认使用 System.Text.Json...来进行序列化 ASP.NET Core 中默认不再使用 WebHostBuilder ,而是使用 HostBuilder(可以更好地将 ASP.NET Core 应用与非 Web 特定的其他服务器方案集成...降低了 WebSocket 连接的内存使用量。 减少 HTTPS 连接的内存使用量并提高了其吞吐量。 新的优化和完全异步 JSON 序列化程序。 减少了窗体分析的内存使用量并提高了其吞吐量。

    3.4K20
    领券