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