将 Asp.Net Core 2.2 App 迁移到 3.1 时的整数序列化 [关闭]

Posted

技术标签:

【中文标题】将 Asp.Net Core 2.2 App 迁移到 3.1 时的整数序列化 [关闭]【英文标题】:Integer serialization while migrating Asp.Net Core 2.2 App to 3.1 [closed] 【发布时间】:2020-05-19 10:07:16 【问题描述】:

我正在将 Asp.Net Core 2.2 Web Api 迁移到 3.1

我注意到现在 System.Int32 现在由 System.Text.Json 序列化为字符串

之前(2.2):

id: 1, ..

在 (3.1) 之后:

id: "1", ..

编辑 id 是 C# 中的 int 属性

因此需要更改使用 web api 的 Js - 我不急于进行的相当繁重的迁移。

我找到了以下选项:

    Keeping NewtonSoft Json.Net for serialization

    这是一个解决方案。但我想跟上最新的技术!

    Providing a custom converter for integers

    在我的情况下似乎不起作用

有没有办法告诉 System.Text.Json 中的新 Json 序列化器将整数序列化为 4​​2 而不是“42”?

【问题讨论】:

在我看来,你应该检查你的 Startup 类。我使用 web api 模板为 .net core 3.1 制作了项目,我从控制器接收 int 值作为 int,而不是 string。 您能否提供更多有关 API 和您正在序列化的模型的信息? id 实际上是 int32 还是字符串/对象或其他类型?您是否注册了一些自定义转换器? S.T.Json 将整数输出为数字,而不是字符串。 无法在独立控制台应用程序中重现,请参阅 dotnetfiddle.net/svwxd4。你能分享一个minimal reproducible example吗?事实是,与 Json.NET 不同,System.Text.Json 不会自动将string 反序列化为int,但这不是您所描述的问题。 @ahsonkhan : 刚刚编辑我的属性是 int @dbc :感谢您的工作。实际上,我从女士那里看到了没有我的“不良行为”的例子——所以我仍然想知道。 【参考方案1】:

在阅读了 Hostel 的建议并检查了新的 Web Api ASP.NET Core 3.1 应用程序并看到了预期的行为后,我将我的 Startup.cs 与Visual Studio 模板应用。

我刚刚在Startup.ConfigureServices

中添加了
services.AddControllers();

尽管缺少那个缺失的服务,控制器“工作”了,但没有像预期的那样。

可能是因为存在另一种添加其他服务的扩展方法。

感谢大家的仔细阅读、评论和提问

【讨论】:

以上是关于将 Asp.Net Core 2.2 App 迁移到 3.1 时的整数序列化 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Simple ASP.NET CORE 2.2 App +Vue JS

如何使用 Asp.Net Core 2.2 / IdentityServer4 / SP.NET Core Identity 手动散列密码

ASP.NET CORE 2.2 WEB APP中的会话过期问题

从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

我正在将我的 asp.net web api 迁移到 asp.net core。 Cors 迁移

ASP.NET Core 2.2 Razor 页面中的自定义路由