问题标签 [jsonconverter]

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 回答
391 浏览

json - 在 Excel VBA 中解析 JSON 并按键访问数组

我正在尝试使用 Excel VBA从网站(链接)中抓取内容。这是来自服务器的 .json 响应(Link):

为此,编写了一个宏,效果很好。但是,我在访问存储在块“操作”中的信息(尤其是具有关键“类型”和最新截止日期的数据)时遇到了困难。错误消息是“下标超出范围”。

这是我的代码的相关部分:

在尝试接近“动作”数组的元素时,我发现以下代码提供 1 作为答案(这是有道理的):

同时,在尝试接近数组的下一个级别时,以下代码提供了一个错误(“下标超出范围”),而不是 5,正如人们所预料的那样:

如何提取信息“RIA Research and Innovation action”(具有关键“类型”)和最新截止日期 2020 年 6 月 3 日(具有关键“deadlineDates”)?

先感谢您!任何帮助深表感谢!

马克西姆

0 投票
1 回答
212 浏览

c# - 自定义 JsonConverter (System.Text.Json) 产生无效的 json

这是我要自定义序列化的类:

如果我有它的列表,正常的序列化会产生以下输出:

我想要的是从 json-result 中删除属性名称,如下所示:

所以我决定像这样实现一个自定义的 JsonConverter:

但这会产生无效的 json:

如何解决这个问题?

0 投票
1 回答
880 浏览

c# - 捕获自定义 JsonConverter 抛出的异常

我正在寻找一种方法来捕获从客户 Newtonsoft 的JsonConverter.

我创建了以下自定义转换器。JsonConverter类中的属性Config使用它。Config类用于发布配置对象并用于 Web API POST 方法(我使用的是 .NET Core 3.1)。

转换器工作正常,但是当抛出异常时,处理异常的中间件不会捕获它。例如,我预计中间件会在 HTTP 请求正文中为 nullMissingConfigTypeException时捕获type,但FuncinappBuilder.Run()永远不会被调用。从转换器抛出的任何异常都不会被中间件捕获。
由于中间件不处理异常,API 方法返回500没有 HTTP 响应体的 http 状态码。我想返回400我的自定义错误消息。

我的目标是(我需要同时实现):

  • 返回 http400错误而不是500and
  • 在 HTTP 响应正文中返回我的自定义错误(Error对象。请参阅下面的中间件)

我想知道是否有办法以某种方式捕获异常(使用中间件或其他方式)或修改 HTTP 响应正文(我必须能够识别发生了特定错误,以便我只能在错误时修改响应正文发生)

注意:我不想ModelState在我的控制器操作方法中使用(不想为每个方法添加某种错误检查代码)。

更新
中间件可以捕获控制器操作方法抛出的异常。

我的自定义转换器:

配置类:

中间件:

更新:
Startup.cs

0 投票
1 回答
552 浏览

json.net - StringEnumConverter 作为属性工作,但不是全局的

我们正在实现一个 .NET Core 3.1 API,我们正在使用 Microsoft.AspNetCore.Mvc.NewtonsoftJson 根据这个文档。我们正在处理枚举,我们需要字符串表示而不是整数。我们使用 JsonConverter 属性来做这件事,如下所示:

我们正在尝试从 Startup.cs 全局执行此操作,如下所示:

如果我们这样做,Cosmos DB 会抱怨

“从文档中提取的 PartitionKey 与标题中指定的不匹配”

因此,我们尝试删除除区域一以外的所有属性。所有其他没有该属性的枚举都正确存储为字符串,但该区域仍然需要该属性才能工作。任何线索为什么会发生这种情况以及如何解决它?

0 投票
1 回答
1505 浏览

c# - Asp.Net Core 3.1 Appsettings 不尊重 JsonConverter

在 asp.net core 3.1 中,使用新的 System.Text.Json,我试图在 appsettings 部分使用自定义 JsonConverter。手动序列化/反序列化可以很好地尊重转换器,但通过选项模式从 appSettings 读取则不行。这是我所拥有的:

Json 转换器。为简单起见,这只是将字符串值转换为大写:

appsettings 类,在字符串属性上声明转换器:

Startup.cs 更改以准备一切:

当我将一个IOptions<MyOptions>注入 HomeController 时,它会读取一个小写的值。如果我手动执行JsonSerializer.Deserialize<MyOptions>("{\"MyString\":\"lowercase_manual\"}"),我会得到一个大写字符串。即使我删除了 JsonSerializerOptions 的启动声明。

有谁知道如何让 appsettings / options 模式尊重 JsonConverter?我必须在其他地方声明 JsonSerializerOptions 吗?谢谢。

0 投票
1 回答
445 浏览

c# - 使用 System.Text.Json 反序列化复杂的多态类型

文档中的 dotnet 示例:

https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-converters-how-to#support-polymorphic-deserialization

显示手动解析多态类型的每个属性。然而:

  • 我的多态对象是复杂的深层层次结构,我不能手动编写每个字段的代码,所以我需要调用JsonSerializer.
  • 类型的线索在同级字段中指定。鉴于无法保证 json 元素顺序,aUtf8JsonReader可能在遇到多态类型之前还没有读取类型信息。

例如

看着Utf8JsonReader

  • 有没有办法查看未来的元素或将解析器位置移回?
  • 是否有一种有效的方法来缓存部分 json 层次结构以进行延迟解析?
0 投票
1 回答
75 浏览

c# - 将字符串字段反序列化为属性对象

假设我有一个 MyClass 类型的对象,它被序列化为 Json,如下所示:

我想将此 Json 反序列化为以下类:

我试图实现一个自定义的 JsonConverter(如下),只是意识到它只能在“DurationField”的子节点上工作,这意味着我必须让它序列化为“DurationField”:{“Value”:“ 3 个月”} 或类似的东西。

有没有办法解决?即,让自定义转换器以字符串为输入,解析字符串后转换为对象?我能想到的最接近的东西是 JsonStringEnumConverter,它接受一个字符串并将其转换为一个 Enum。

0 投票
1 回答
198 浏览

c# - JsonReader.ReadRawValue 在哪里?

我正在实现一个自定义的 JsonConverter。

在实现中,WriteJson我使用函数JsonWriter.WriteRawValue()以我的方式编写对象。

在 的实现中ReadJson,我想以我的方式读取和管理相同的值,并且我希望找到函数JsonReader.ReadRawValue(),但它不存在。

我错过了什么吗?

谢谢

0 投票
0 回答
86 浏览

.net-core-3.0 - Text.Json 自定义 JsonConverter 被忽略

我有两个 Json 转换器,一个将日期转换为 MM/dd/yyyy,另一个转换为 MM/dd/yy。第二个转换器(首先在代码示例中列出)总是被忽略,而使用第一个。有没有办法让 DateTime 有多个转换器,并在某些页面上使用一个,在其他页面上使用另一个。

使用了 typeof(ShortDateConverter),这里忽略了 typeof(MmddyyDateConverter):

0 投票
1 回答
39 浏览

c#-4.0 - JsonConvert.DeserializeObject(对象)

{“15 天”:“675”,“180 天”:“8100”,“30 天”:“1350”,“60 天”:“2700”,“90 天”:“4050”}