在超过几天的时间里投入了大量的时间后,我终于放弃了这一点。但为了确保我没有遗漏任何东西,我想得到你的意见。
所以示例xml看起来像这样
<Query>
<SpecialFilter1>
<SpecialExpression1>some_text</SpecialExpression1>
<SpecialExpression1>some_text</SpecialExpression1>
<SpecialExpression2>some_other_text</SpecialExpression2>
<SpecialExpression2>some_other_text</SpecialExpression2>
</SpecialFilter1>
<SpecialFilter2>
<SpecialExpression1>some_text</SpecialExpression1>
</SpecialFilter2>
</Query>
随附的示例代码位于Github Gist https://goo.gl/nwJWfs
中对我来说,使用XML的限制是,不可能有一些属性或其他元素来指定反序列化的类信息。这就是为什么它必须纯粹通过代码来解决。
此代码在反序列化时失败,因为查询类没有关于属性“SpecialFilter1”的信息,它只知道基类。
我为JsonTypeInfo.Id
和JsonTypeInfo.As
尝试了许多排列组合。我还尝试了自定义JsonTypeIdResolver
和JsonTypeResolverBuilder
。
最后,通过在JsonTypeResolverBuilder
中使用DeserializationProblemHandler
反序列化上下文,我在自定义findContextualValueDeserializer()
和handleUnknownProperty()
的组合中获得了部分成功。但这看起来非常肮脏,而且序列化也有这样的问题。
更新1:
在拒绝BeanDeserialzerModifier
之前,现在我想知道是否有办法修改一些东西来解决这个问题?