问题标签 [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.
c# - 我可以使用 System.Text.Json 使用私有构造函数反序列化 Json 吗?
想知道是否可能拥有私有构造函数并使用新的 System.Text.Json 序列化程序。
一次简单的往返。
c# - 是否有 System.Text.Json 替代 Json.NET 的 JsonProperty(Order)?
由于System.Text.Json
现在是.NET Core 3.0的JSON 库,是否有匹配 Json.NET 的属性/参数?我浏览了扩展类,但似乎没有一个能达到这个目的。JsonProperty(Order)
System.Text.Json.Serialization.JsonAttribute
经历JsonSerializer.Write.HandleObject.cs
等并没有向我展示任何可以直接替换此处的 legacy 属性的东西。我错过了什么吗?如果没有,在这里复制遗留行为的最简单方法是什么?
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.100
和6.0.100
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)
c# - 使用 .NET Core System.Text.Json 序列化/反序列化类层次结构
我有一个简单的类层次结构,我想使用 System.Text.Json 对其进行序列化。
有3个班。基地是Shape
。继承的是Box
和Circle
。
我计划在我的前端应用程序上使用这些类作为标记联合,所以我只是引入了一个鉴别器属性Tag
。
我写了一个类型转换器,它支持这个层次结构的序列化/反序列化。
我想了解的是——这是否是实现此类功能的最佳方法。事实上,序列化的输出结果非常难看(我在下面的示例中添加了注释)。无论如何,我不确定它是否以最好的方式完成。
这是我如何实现序列化/反序列化的示例:
c# - 如何使用 System.Text.Json 忽略错误值
我正在从 .NET Core 3.0 应用程序迁移Newtonsoft.Json
到System.Text.Json
。我试图忽略错误值。
在System.Text.Json
我发现忽略空值的选项:
但我找不到忽略System.Text.Json
.
有人知道如何做到这一点System.Text.Json
吗?
或者,如果有人知道相当于 Newtonsoft 的DefaultValueHandling = DefaultValueHandling.Ignore
选项,那也太棒了。
c# - System.Text.Json 中的 Newtonsoft.Json DefaultValueHandling = DefaultValueHandling.Ignore 选项的等价物是什么
我正在从 .NET Core 3.0 应用程序迁移Newtonsoft.Json
到System.Text.Json
。
如何获得与配置为System.Text.Json
的 .NET Core 2.2 应用程序相同的行为?您可以找到此处描述的选项。Newtonsoft.Json
DefaultValueHandling = DefaultValueHandling.Ignore
DefaultValueHandling
json - 如何使用 System.Text.Json 处理可为空的引用类型?
我已将我的项目升级到 netcore 3.0,并且我正在重构项目以使用新的可为空引用类型功能,但由于以下问题很快就卡住了。
假设我使用了一个返回以下 JSON 的 REST api:
此 api 始终返回名称/年份,因此它们不可为空。
我会使用这个简单的类进行反序列化:
我会Car
使用 new 将其反序列化为一个实例System.Text.Json
这一切都有效,但是当启用可空引用类型时,我在声明为不可空但可以为空的Car
类中收到警告。Name
我明白为什么我会得到这个,因为可以在不初始化Name
属性的情况下实例化这个对象。
所以理想情况下Car
应该是这样的:
但这不起作用,因为System.Text.Json
序列化程序不支持带参数的构造函数。
所以我的问题是:我将如何声明Car
它Name
是不可为空的并让它在System.Text.Json
没有“不可空”警告的情况下使用?
我不想让它可以为空,因为在启用可空引用类型时,我基本上必须对所有内容进行空检查,并且因为我的示例中的 REST API 说它们总是被提供,它们不应该是可空的。
c# - 在 .net core 3 中将 newtonsoft 代码转换为 System.Text.Json。相当于 JObject.Parse 和 JsonProperty
我正在将我的 newtonsoft 实现转换为 .net core 3.0 中的新 JSON 库。我有以下代码
我找不到任何等价物JObject.Parse(json);
还有什么是JsonProperty
等效的属性
我将寻找的另一件事相当于Formating.None
.
c# - 如何使用 System.Text.Json 库在现有 json 中添加属性?
在上面的示例 JSON 中,我想在属性“TestData”中添加一个名为“Name”的属性,其值为“John”。如何使用 .net Core 3.0 System.Text.Json 库来实现这一点。
我曾尝试使用 Utf8JsonWriter 的方法,但它正在创建一个新的 JSON 对象,而不是将其附加到上述现有 JSON 中。