JSON.NET 转换器可以转换 - 如何访问属性

本文关键字:何访问 访问 属性 转换器 NET 转换 JSON | 更新日期: 2023-09-27 18:31:50

我们需要为 DateTimeDateTime? 编写一个自定义JsonConverter,以便遵循使用 DisplayFormat 属性指定的日期格式。

[如果有人知道现有的转换器正是这样做的 ->我们想知道它:-)]

我们从 JsonConverter 派生了我们的转换器,但是,似乎无法访问任何属性,因为我们无法访问正在转换的属性 - 只能访问其类型和值。

我们还有其他忽略的方式吗?如何从 JsonConverter 中访问属性?

JSON.NET 转换器可以转换 - 如何访问属性

据我所知,似乎没有办法从转换器中访问正在转换的对象的上下文(父对象)。 另一个答案(现已删除)声称您可以通过JsonSerializer上的 Context 属性,但这返回了一个不包含有关父对象信息的StreamingContext(其内部 Context 属性在我的测试中始终为空)。

也许针对您的情况的可能解决方案是在此答案中使用该想法的变体。 换句话说,创建IsoDateTimeConverter的自定义派生,为您需要的每个不同日期格式创建一个。 我猜只需要一小部分。 然后,使用 [JsonConverter] 属性修饰DateTime属性,根据所需的日期格式指定要用于每个属性的自定义日期转换器。

您可以将父对象放在 StreamingContext.Context 中,该上下文是父对象的 OnSerializing 回调中额外信息的占位符。我建议将此上下文定义为字符串和对象的字典,并使用预定义的键。在转换器中,您可以从 Serializer.Context 获取存储的附加信息。