问题标签 [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.
json - 在 Excel VBA 中解析 JSON 并按键访问数组
我正在尝试使用 Excel VBA从网站(链接)中抓取内容。这是来自服务器的 .json 响应(Link):
为此,编写了一个宏,效果很好。但是,我在访问存储在块“操作”中的信息(尤其是具有关键“类型”和最新截止日期的数据)时遇到了困难。错误消息是“下标超出范围”。
这是我的代码的相关部分:
在尝试接近“动作”数组的元素时,我发现以下代码提供 1 作为答案(这是有道理的):
同时,在尝试接近数组的下一个级别时,以下代码提供了一个错误(“下标超出范围”),而不是 5,正如人们所预料的那样:
如何提取信息“RIA Research and Innovation action”(具有关键“类型”)和最新截止日期 2020 年 6 月 3 日(具有关键“deadlineDates”)?
先感谢您!任何帮助深表感谢!
马克西姆
c# - 自定义 JsonConverter (System.Text.Json) 产生无效的 json
这是我要自定义序列化的类:
如果我有它的列表,正常的序列化会产生以下输出:
我想要的是从 json-result 中删除属性名称,如下所示:
所以我决定像这样实现一个自定义的 JsonConverter:
但这会产生无效的 json:
如何解决这个问题?
c# - 捕获自定义 JsonConverter 抛出的异常
我正在寻找一种方法来捕获从客户 Newtonsoft 的JsonConverter
.
我创建了以下自定义转换器。JsonConverter
类中的属性Config
使用它。Config
类用于发布配置对象并用于 Web API POST 方法(我使用的是 .NET Core 3.1)。
转换器工作正常,但是当抛出异常时,处理异常的中间件不会捕获它。例如,我预计中间件会在 HTTP 请求正文中为 nullMissingConfigTypeException
时捕获type
,但Func
inappBuilder.Run()
永远不会被调用。从转换器抛出的任何异常都不会被中间件捕获。
由于中间件不处理异常,API 方法返回500
没有 HTTP 响应体的 http 状态码。我想返回400
我的自定义错误消息。
我的目标是(我需要同时实现):
- 返回 http
400
错误而不是500
and - 在 HTTP 响应正文中返回我的自定义错误(
Error
对象。请参阅下面的中间件)
我想知道是否有办法以某种方式捕获异常(使用中间件或其他方式)或修改 HTTP 响应正文(我必须能够识别发生了特定错误,以便我只能在错误时修改响应正文发生)
注意:我不想ModelState
在我的控制器操作方法中使用(不想为每个方法添加某种错误检查代码)。
更新
中间件可以捕获控制器操作方法抛出的异常。
我的自定义转换器:
配置类:
中间件:
更新:
Startup.cs
json.net - StringEnumConverter 作为属性工作,但不是全局的
我们正在实现一个 .NET Core 3.1 API,我们正在使用 Microsoft.AspNetCore.Mvc.NewtonsoftJson 根据这个文档。我们正在处理枚举,我们需要字符串表示而不是整数。我们使用 JsonConverter 属性来做这件事,如下所示:
我们正在尝试从 Startup.cs 全局执行此操作,如下所示:
如果我们这样做,Cosmos DB 会抱怨
“从文档中提取的 PartitionKey 与标题中指定的不匹配”
因此,我们尝试删除除区域一以外的所有属性。所有其他没有该属性的枚举都正确存储为字符串,但该区域仍然需要该属性才能工作。任何线索为什么会发生这种情况以及如何解决它?
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 吗?谢谢。
c# - 使用 System.Text.Json 反序列化复杂的多态类型
文档中的 dotnet 示例:
显示手动解析多态类型的每个属性。然而:
- 我的多态对象是复杂的深层层次结构,我不能手动编写每个字段的代码,所以我需要调用
JsonSerializer
. - 类型的线索在同级字段中指定。鉴于无法保证 json 元素顺序,a
Utf8JsonReader
可能在遇到多态类型之前还没有读取类型信息。
例如
看着Utf8JsonReader
:
- 有没有办法查看未来的元素或将解析器位置移回?
- 是否有一种有效的方法来缓存部分 json 层次结构以进行延迟解析?
c# - 将字符串字段反序列化为属性对象
假设我有一个 MyClass 类型的对象,它被序列化为 Json,如下所示:
我想将此 Json 反序列化为以下类:
我试图实现一个自定义的 JsonConverter(如下),只是意识到它只能在“DurationField”的子节点上工作,这意味着我必须让它序列化为“DurationField”:{“Value”:“ 3 个月”} 或类似的东西。
有没有办法解决?即,让自定义转换器以字符串为输入,解析字符串后转换为对象?我能想到的最接近的东西是 JsonStringEnumConverter,它接受一个字符串并将其转换为一个 Enum。
c# - JsonReader.ReadRawValue 在哪里?
我正在实现一个自定义的 JsonConverter。
在实现中,WriteJson
我使用函数JsonWriter.WriteRawValue()
以我的方式编写对象。
在 的实现中ReadJson
,我想以我的方式读取和管理相同的值,并且我希望找到函数JsonReader.ReadRawValue()
,但它不存在。
我错过了什么吗?
谢谢
.net-core-3.0 - Text.Json 自定义 JsonConverter 被忽略
我有两个 Json 转换器,一个将日期转换为 MM/dd/yyyy,另一个转换为 MM/dd/yy。第二个转换器(首先在代码示例中列出)总是被忽略,而使用第一个。有没有办法让 DateTime 有多个转换器,并在某些页面上使用一个,在其他页面上使用另一个。
使用了 typeof(ShortDateConverter),这里忽略了 typeof(MmddyyDateConverter):
c#-4.0 - JsonConvert.DeserializeObject(对象)
{“15 天”:“675”,“180 天”:“8100”,“30 天”:“1350”,“60 天”:“2700”,“90 天”:“4050”}