问题标签 [system.text.json]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2479 浏览

c# - 如何配置两个 JSON 序列化器并根据路由选择正确的一个

我有一个使用 .Net Framework 4.7 的 ASP.NET Core Web API 项目,我正在升级到 .Net Core 3.1。我升级的原因之一是使用新的 System.Text.Json 序列化程序。

目前,我有一些基于路由的 API 版本,例如:

我将创建一个新的(v3)来使用新的序列化程序。但问题是:我想在旧路由上继续使用 JSON.Net,以避免集成客户端出现任何可能的格式问题。

有没有一种简单的方法来配置 Asp.Net Core 以根据路由自动选择正确的 JSON 序列化程序?

0 投票
1 回答
762 浏览

c# - 使用 System.Text.Json 一次读取一条记录

我正在尝试使用 .net core 3.0 一次将单个 json 记录读入内存。

本页:https ://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/

使用阅读器给出这个例子:

在示例中,它加载整个字节数组。我主要关心的是内存,因为我正在处理大型 json 文件,我不想只加载正在处理的当前记录(或至少一个较小的块)。

我不确定如何将字节流传递给Utf8JsonReader并一次读取一条记录。

使用.net core 3.0一次读取一条记录的简单方法是什么?

0 投票
0 回答
2272 浏览

c# - docker容器中的线程池饥饿

我第一次遇到这种问题。我正在使用一些托管服务(AspNet、Core C# 8.0、Docker 容器 Linux)的容器中运行应用程序。第一个服务在我的数据库中进行大数据摄取。我将解释该服务:它刚刚启动,从 Web 下载并下载一个 2gb 文件,其中包含大量 JSON。然后它会一一添加我数据库中反序列化的每个 JSON 文件。它开始得很好,但是在 500.000 条记录开始变慢并且没有结束数据摄取之后。如果我跑

我收到这条消息:

在此处输入图像描述

使用 docker stats,我看到我的容器使用了所有可能的资源。非常感谢您的帮助!

这是HS:

这是管理 JSON 文件的代码部分:

这是在数据库中进行插入的代码部分:

公共类 VURepository : IVURepository { 私有只读 ILogger _logger;

0 投票
0 回答
1598 浏览

c# - 将文件流传递给 System.Text.Json.Utf8JsonReader

无论如何将文件流传递给System.Text.Json.Utf8JsonReader

我想使用类似StreamReader数据源的东西,这样我就可以扫描文件而不会将它们完全加载到内存中。

这些是读者构造函数

在此处输入图像描述

如何向此阅读器传递文件流?

为了比较,这是使用 Newtonsoft 阅读器的方式:

如何使用新的 .net 核心命名空间来做到这一点?

0 投票
2 回答
5411 浏览

c# - 由于对象的当前状态(System.Text.Json),操作无效

我们有一个 API,它只是将传入的 JSON 文档发布到消息总线,并为每个文档分配一个 GUID。我们正在从 .Net Core 2.2 升级到 3.1,并打算用新System.Text.Json库替换 NewtonSoft。

我们反序列化传入的文档,将 GUID 分配给其中一个字段,然后在发送到消息总线之前重新序列化。不幸的是,重新序列化失败并出现异常Operation is not valid due to the current state of the object

这是一个显示问题的控制器:-

JsonApiMessage 对象的定义如下:-

一个示例调用如下所示:-

当我payload在 Visual Studio 中检查断点处的内容时,它在顶层看起来不错,但这些JsonElement位看起来不透明,所以我不知道它们是否已被正确解析。它们的结构可以变化,所以我们只关心它们是有效的 JSON。在旧的 NewtonSoft 版本中,它们是JObjects。

添加 GUID 后,它会在断点检查时出现在payload对象中,但我怀疑该问题与对象中的其他元素为只读或类似内容有关。

0 投票
2 回答
2698 浏览

c# - C# .Net Core 3.1 System.Text.Json 在序列化中忽略空集合

使用 Newtonsoft,我们有一个用于忽略空集合的自定义解析器。.Net core 3.1 中的新 system.text.json 是否有任何等效配置

0 投票
1 回答
3548 浏览

c# - System.Text.Json 自定义 JsonConverter.Deserialize() 未使用 .Read() 方法

我在使用 System.Text.Json 和自定义日期时间格式时遇到问题。

我创建了一个自定义转换器,它在我的 api 项目中工作。当我构建我的客户端时,我尝试使用相同的类,但是 .Deserialize() 方法不会在我的类的 DateTime 属性上调用 .Read() 。

有人遇到过同样的问题吗?

根据要求的最小可复制示例:

0 投票
4 回答
4653 浏览

c# - 是否有一种简单的方法可以在 System.Text.Json 的自定义转换器中手动序列化/反序列化子对象?

注意:我使用的是 Microsoft 的新版本System.Text.JsonJson.NET因此请确保答案相应地解决了这个问题。

考虑这些简单的 POCO:

汽车可以像这样用 JSON 表示......

自行车可以这样表示......

很直接。现在考虑这个 JSON。

这是一个对象数组,其中属性名称是了解相应嵌套对象所指类型的关键。

虽然我知道如何编写一个自定义转换器UTF8JsonReader来读取属性名称(例如“汽车”和“自行车”并且可以相应地编写一个 switch 语句,但我不知道如何回退到默认值CarBicycle转换器(即标准 JSON 转换器),因为我在阅读器上看不到任何读取特定类型对象的方法。

那么如何手动反序列化这样的嵌套对象呢?

0 投票
1 回答
2389 浏览

c# - System.Text.Json.JsonSerializer 可以在只读属性上序列化集合吗?

我无法让新System.Text.Json的反序列化存储在只读属性上的集合。

考虑这些类:

这是 JSON:

这是我正在运行的代码...

以上输出如下:

如果我更改Items为读/写,那么它可以工作,但是我们的许多模型都具有包含可变集合的只读属性,所以我想知道我们是否可以使用它。

注意:Json.NET 正确处理了这个问题,在内部调用现有集合的“添加”方法而不是创建一个新集合,但我不知道如何在为我们定义的所有类编写自定义转换器之外实现这一点。

0 投票
3 回答
3839 浏览

asp.net-core - 使用当前版本的 System.Text.Json.JsonSerializer 序列化 DataSet

您对我们如何使用 System.Text.Json.JsonSerializer 序列化 DataSet、DataTable 有 什么建议? 目前它抛出此异常:'检测到不支持的可能对象循环。这可能是由于循环或对象深度大于最大允许深度 64 造成的。