问题标签 [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 投票
2 回答
4180 浏览

c# - 我可以使用 System.Text.Json 使用私有构造函数反序列化 Json 吗?

想知道是否可能拥有私有构造函数并使用新的 System.Text.Json 序列化程序。

一次简单的往返。

0 投票
2 回答
1116 浏览

c# - 是否有 System.Text.Json 替代 Json.NET 的 JsonProperty(Order)?

由于System.Text.Json现在是.NET Core 3.0JSON 库,是否有匹配 Json.NET 的属性/参数?我浏览了扩展类,但似乎没有一个能达到这个目的。JsonProperty(Order)System.Text.Json.Serialization.JsonAttribute

经历JsonSerializer.Write.HandleObject.cs等并没有向我展示任何可以直接替换此处的 legacy 属性的东西。我错过了什么吗?如果没有,在这里复制遗留行为的最简单方法是什么?

0 投票
0 回答
2171 浏览

c# - .Net Core System.Text.Json 以最小日期时间和 UTC 偏移量失败

我一直在从 2.2 迁移到 3.0,到目前为止一切都非常顺利,但是当用新的 System.Text.Json 替换 Newtonsoft 时,我遇到了以下问题。

当尝试反序列化具有 UTC 偏移量的 DateTime 最小值时,它会引发以下异常

未处理的异常。System.Text.Json.JsonException:无法将 JSON 值转换为 System.DateTime。路径:$.DateCreated | 行号:2 | 字节位置行内:43

例子:

在线示例可以在这里找到Fiddle

我想我可以编写自己的 DateTime 序列化程序,但必须有一种更简单/更清洁的方法来完成 Newtonsoft 所做的事情,而无需任何配置。

这发生在3.0.100, 3.1.500,5.0.1006.0.100

0 投票
2 回答
6457 浏览

c# - 使用 JsonSerializer.DeserializeAsync 反序列化 JSON 不使用我的 JsonConverter

服务器返回一个 JSON 字符串值,它是一个 URL 查询字符串:

我设置了一个属性来接收它,并将其转换为 aDictionary作为反序列化过程的一部分:

具有属性的JsonConverter属性:

转换器:

这应该有效。

但它甚至没有到达我的转换器。

据我所知,JsonSerializer.DeserializeAsync<T>(myJson)看到属性的类型是 a Dictionary,因此它尝试自行解析值,但失败(结果异常是“无效转换”,因为它试图GetEnumerable()等等)。我的转换器中的断点甚至从未被击中。

我可以通过将属性设置为 anobject然后将其转换为Dictionary稍后使用它的位置来使其工作,但这是一个丑陋的解决方案。

有没有办法强制JsonSerializer.DeserializeAsync<T>(myJson)只使用我的转换器,而不是让它自己变得聪明?

(我在 .NET Core 3 中使用 Microsoft 的 System.Text.Json)

0 投票
2 回答
6456 浏览

c# - 使用 .NET Core System.Text.Json 序列化/反序列化类层次结构

我有一个简单的类层次结构,我想使用 System.Text.Json 对其进行序列化。

有3个班。基地是Shape。继承的是BoxCircle

我计划在我的前端应用程序上使用这些类作为标记联合,所以我只是引入了一个鉴别器属性Tag

我写了一个类型转换器,它支持这个层次结构的序列化/反序列化。

我想了解的是——这是否是实现此类功能的最佳方法。事实上,序列化的输出结果非常难看(我在下面的示例中添加了注释)。无论如何,我不确定它是否以最好的方式完成。

这是我如何实现序列化/反序列化的示例:

0 投票
1 回答
5186 浏览

c# - 如何使用 System.Text.Json 忽略错误值

我正在从 .NET Core 3.0 应用程序迁移Newtonsoft.JsonSystem.Text.Json。我试图忽略错误值。

System.Text.Json我发现忽略空值的选项:

但我找不到忽略System.Text.Json.

有人知道如何做到这一点System.Text.Json吗?

或者,如果有人知道相当于 Newtonsoft 的DefaultValueHandling = DefaultValueHandling.Ignore选项,那也太棒了。

0 投票
4 回答
2015 浏览

c# - System.Text.Json 中的 Newtonsoft.Json DefaultValueHandling = DefaultValueHandling.Ignore 选项的等价物是什么

我正在从 .NET Core 3.0 应用程序迁移Newtonsoft.JsonSystem.Text.Json

如何获得与配置为System.Text.Json的 .NET Core 2.2 应用程序相同的行为?您可以找到此处描述的选项。Newtonsoft.JsonDefaultValueHandling = DefaultValueHandling.IgnoreDefaultValueHandling

0 投票
3 回答
5460 浏览

json - 如何使用 System.Text.Json 处理可为空的引用类型?

我已将我的项目升级到 netcore 3.0,并且我正在重构项目以使用新的可为空引用类型功能,但由于以下问题很快就卡住了。

假设我使用了一个返回以下 JSON 的 REST api:

此 api 始终返回名称/年份,因此它们不可为空。

我会使用这个简单的类进行反序列化:

我会Car使用 new 将其反序列化为一个实例System.Text.Json

这一切都有效,但是当启用可空引用类型时,我在声明为不可空但可以为空的Car类中收到警告。Name我明白为什么我会得到这个,因为可以在不初始化Name属性的情况下实例化这个对象。

所以理想情况下Car应该是这样的:

但这不起作用,因为System.Text.Json序列化程序不支持带参数的构造函数。

所以我的问题是:我将如何声明CarName是不可为空的并让它在System.Text.Json没有“不可空”警告的情况下使用?

我不想让它可以为空,因为在启用可空引用类型时,我基本上必须对所有内容进行空检查,并且因为我的示例中的 REST API 说它们总是被提供,它们不应该是可空的。

0 投票
2 回答
17960 浏览

c# - 在 .net core 3 中将 newtonsoft 代码转换为 System.Text.Json。相当于 JObject.Parse 和 JsonProperty

我正在将我的 newtonsoft 实现转换为 .net core 3.0 中的新 JSON 库。我有以下代码

我找不到任何等价物JObject.Parse(json);

还有什么是JsonProperty等效的属性

我将寻找的另一件事相当于Formating.None.

0 投票
4 回答
10143 浏览

c# - 如何使用 System.Text.Json 库在现有 json 中添加属性?

在上面的示例 JSON 中,我想在属性“TestData”中添加一个名为“Name”的属性,其值为“John”。如何使用 .net Core 3.0 System.Text.Json 库来实现这一点。

我曾尝试使用 Utf8JsonWriter 的方法,但它正在创建一个新的 JSON 对象,而不是将其附加到上述现有 JSON 中。