JSON.NET 转换器可以转换 - 如何访问属性
本文关键字:何访问 访问 属性 转换器 NET 转换 JSON | 更新日期: 2023-09-27 18:31:50
我们需要为 DateTime
和 DateTime?
编写一个自定义JsonConverter
,以便遵循使用 DisplayFormat
属性指定的日期格式。
[如果有人知道现有的转换器正是这样做的 ->我们想知道它:-)]
我们从 JsonConverter
派生了我们的转换器,但是,似乎无法访问任何属性,因为我们无法访问正在转换的属性 - 只能访问其类型和值。
我们还有其他忽略的方式吗?如何从 JsonConverter 中访问属性?
据我所知,似乎没有办法从转换器中访问正在转换的对象的上下文(父对象)。 另一个答案(现已删除)声称您可以通过JsonSerializer
上的 Context
属性,但这返回了一个不包含有关父对象信息的StreamingContext
(其内部 Context
属性在我的测试中始终为空)。
也许针对您的情况的可能解决方案是在此答案中使用该想法的变体。 换句话说,创建IsoDateTimeConverter
的自定义派生,为您需要的每个不同日期格式创建一个。 我猜只需要一小部分。 然后,使用 [JsonConverter]
属性修饰DateTime
属性,根据所需的日期格式指定要用于每个属性的自定义日期转换器。
您可以将父对象放在 StreamingContext.Context 中,该上下文是父对象的 OnSerializing 回调中额外信息的占位符。我建议将此上下文定义为字符串和对象的字典,并使用预定义的键。在转换器中,您可以从 Serializer.Context 获取存储的附加信息。