问题标签 [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 回答
33093 浏览

c# - 使用 .NET core 3.0/System.text.Json 解析 JSON 文件

System.Text.Json我正在尝试使用.NET Core 3.0 中的新 JSON 阅读器读取和解析无法放入内存的大型 JSON 文件。

Microsoft 的示例代码将 aReadOnlySpan<byte>作为输入

我正在努力寻找的是如何实际将此代码与 a 一起使用FileStream,将 aFileStream放入 aReadOnlySpan<byte>中。

我尝试使用以下代码读取文件并 ReadAndProcessLargeFile("latest-all.json");

它与错误消息一起崩溃

作为参考,这是我使用 Newtonsoft.Json 的工作代码

0 投票
2 回答
24135 浏览

c# - JsonConverter 等效于使用 System.Text.Json

我开始将我拥有的一些代码迁移Newtonsoft.JsonSystem.Text.Json.net Core 3.0 应用程序中。

我从

[JsonProperty("id")][JsonPropertyName("id")]

但我有一些用属性装饰的JsonConverter属性:

[JsonConverter(typeof(DateTimeConverter))] [JsonPropertyName("birth_date")] DateTime BirthDate{ get; set; }

System.Text.Json但是我在Does someone know how can be implemented in .net Core 3.0中找不到这个Newtonsoft转换器的等价物?

谢谢!

0 投票
3 回答
11628 浏览

c# - 使用 System.Text.Json.Serialization 解析 json 的异常

我的示例代码非常简单:

最后一行提出:

抛出异常:System.Text.Json.dll 中的“System.NullReferenceException”对象引用未设置为对象的实例。

我究竟做错了什么 ?

(注意这是最新的 .NET Core 3 预览版 5 和最新的 System.Text.Json 4.6.0-preview6.19259.10)

添加无参数构造函数可以防止异常,但是我不想要/不需要无参数构造函数,并且 Json.Net 在没有它的情况下解析得很好。

有没有办法让 System.Text.Json 像 Json.Net 一样使用给定的构造函数进行解析?

0 投票
7 回答
23940 浏览

c# - .Net Core 3.0 JsonSerializer 填充现有对象

我正在准备从 ASP.NET Core 2.2 迁移到 3.0。

由于我不使用更高级的 JSON 功能(但可能如下所述),并且 3.0 现在带有一个内置的 JSON 命名空间/类System.Text.Json,我决定看看我是否可以放弃以前的 default Newtonsoft.Json
请注意,我知道这System.Text.Json不会完全取代Newtonsoft.Json.

我设法在任何地方都做到了,例如

但在一个地方,我填充了一个现有的对象。

一个Newtonsoft.Json可以做


内置System.Text.Json命名空间有一些额外的类,比如JsonDocumnetJsonElementUtf8JsonReader但我找不到任何将现有对象作为参数的类。

我也没有足够的经验来了解如何利用现有的。

.Net Core 中可能会有一个即将推出的功能 (感谢Mustafa Gursel提供的链接),但与此同时(如果没有的话怎么办),...

...我现在想知道,是否有可能实现与可以做的事情类似的事情PopulateObject

我的意思是,是否可以使用其他任何System.Text.Json类来完成相同的操作,并且只更新/替换属性集?,...或其他一些巧妙的解决方法?


这是我正在寻找的示例输入/输出,它需要是通用的,因为传递给反序列化方法的对象是类型<T>)。我有 2 个 Json 字符串要解析为一个对象,其中第一个设置了一些默认属性,第二个设置了一些,例如

请注意,属性值可以是除 a 之外的任何其他类型string

json字符串1:

json字符串2:

使用上面的 2 个 Json 字符串,我想要一个对象,结果是:

如上例所示,如果第二个属性有值/已设置,它将替换第一个中的值(如“Head”和“Link”),如果没有,则现有值保持(如“Title”)

0 投票
2 回答
903 浏览

c# - 我在这里制造泄漏吗?

我正在使用 NETCore 3.0 的 System.Text.Json 命名空间中的新 JsonSerializer 来反序列化 Json 文档,如下所示:

响应定义为:

JsonDocument实现 IDisposable的事实让我想知道,如果保留对Bar可以包含在 JsonDocument 中的元素 () 的引用,是否会造成内存泄漏?

请注意,通常我会避免将数据存储为像这样的“变体”类型。不幸的是,Bar属性值的结构在编译时是未知的。

我的怀疑源于 System.Text.Json 宣传的懒惰评估的优势,我不确定这是否涉及延迟 I/O。

0 投票
1 回答
2851 浏览

asp.net - 使用新的“System.Text.Json”类对 System.Data.DataTable 进行序列化时出现异常(Asp.net core 3.0 preview 8)

我在 asp.net core 3.0 preview 8 中编写了一个 rest api,我试图使用新的“System.Text.Json”类序列化一个 System.Data.DataTable,但是在 Serialize 方法中我收到了异常:

不支持“System.Data.DataTable.ChildRelations”上的集合类型“System.Data.DataRelationCollection”。

使用 newtonsoft json 序列化程序,相同的序列化效果很好。

重现问题的示例代码:

详细异常:

System.NotSupportedException HResult=0x80131515 Message=不支持“System.Data.DataTable.ChildRelations”上的集合类型“System.Data.DataRelationCollection”。Source=System.Text.Json StackTrace: 在 System.Text.Json.JsonClassInfo.GetElementType(Type propertyType, Type parentType, MemberInfo memberInfo, JsonSerializerOptions options) at System.Text.Json.JsonClassInfo.CreateProperty(Type declaredPropertyType, Type runtimePropertyType, Type在 System.Text.Json.JsonClassInfo.AddProperty(Type propertyType, PropertyInfo propertyInfo, Type classType, JsonSerializerOptions options) 在 System.Text.Json.JsonClassInfo..ctor(Type type, JsonSerializerOptions选项)在 System.Text.Json。

你能帮忙吗?

谢谢你。

0 投票
1 回答
3486 浏览

c# - JsonSerializer 不包含 Parse 的定义

在我正在关注的教程中,他们有这行代码

但我的视觉工作室给了我一个错误

JsonSerializer 不包含 Parse 的定义

这是我的进口

0 投票
0 回答
1309 浏览

c# - AddNewtonsoftJson 没有覆盖 System.Text.Json

我已将我的 .Net Core 版本从预览版 2 升级到预览版 6,这破坏了一些东西。最重要的是我不能再使用 newtonsoft JSON。

ConfigureServices 中的 AddNewtonsoftJson 似乎什么都不做,而且新的 Json 序列化程序似乎只适用于属性,而不适用于字段。它看不到 JSONIgnoreAttribute。

在 ConfigureServices (在启动中)我有这条线

services.AddMvc(x => x.EnableEndpointRouting = false).AddNewtonsoftJson();

这似乎没有做它应该做的事情。在我的应用程序中,只有属性被序列化,而不是字段,并且[JSONIgnore]属性什么都不做。

我可以通过提升我需要成为属性的所有公共字段来解决缺少字段,但我需要能够忽略一些。

其他人有这个吗?如何让新的 JSON 序列化程序忽略某些属性并序列化公共字段,或者返回 Newtonsoft?

0 投票
7 回答
37501 浏览

c# - 你如何使用 System.Text.Json 从一些 json 中读取一个简单的值?

我有这个json

我该如何48e86841-f62c-42c9-ae20-b54ba8c35d6d摆脱它?我能找到的所有例子都显示做类似的事情

但是我没有适合这个定义的类型,我不想创建一个。我试过反序列化为动态,但我无法让它工作。

任何人都可以提出任何建议吗?


编辑:

我刚刚发现我可以做到这一点:

这确实有效 - 但有更好的方法吗?

0 投票
1 回答
223 浏览

.net-core - JsonIgnore 和不支持的集合对象

似乎 System.Text.Json 序列化程序在执行时没有考虑 JsonIgnore 属性 - 我得到了这个异常:

执行此代码时:

新序列化程序的文档有点稀疏 - 我做错了什么吗?