.net core 2.2升级3.1踩坑之旅 System.Text.Json

之前的项目一直使用.net core 2.2,今天要做一个部门内部使用的系统,想着使用一下3.1的版本

结果第一个接口就遇到了问题

1、使用3.1版本,发现无法返回动态(dynamic)对象

解决办法: 网上有一些文章说Startup.cs里面2.2和3.1的版本是不一样的, 有人说将3.1版本自动生成的删除掉,用2.2的就可以解决, 自己也没有细细的去比,也没有去尝试是否可行,

而是采用了下面的方式

在ConfigureServices里面增加下面的代码   

services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});

2、日期格式化问题  

2.2版本中,在Startup.cs

ConfigureServices(IServiceCollection services) 里这样写,就可以:
services.AddMvc()
.AddJsonOptions(options => { options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; });

但是在3.1版本中,默认不包含 NewtonsoftJson,而是默认使用System.Text.Json,据说是为了效率。但微软还是推荐使用NewtonsoftJson。

可以通过Nutget安装NewtonsoftJson, 然后在ConfigureServices里面添加下面的代码

services.AddControllersWithViews()

.AddNewtonsoftJson(options =>
                {
                    options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                    options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;  // 设置时区为 UTC)
                    options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                });

猜你喜欢

转载自www.cnblogs.com/sophy87/p/13187183.html