使用Jackson没有类型属性的多态序列化/反序列化

时间:2015-09-02 16:58:17

标签: java json xml serialization jackson

在超过几天的时间里投入了大量的时间后,我终于放弃了这一点。但为了确保我没有遗漏任何东西,我想得到你的意见。

所以示例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.IdJsonTypeInfo.As尝试了许多排列组合。我还尝试了自定义JsonTypeIdResolverJsonTypeResolverBuilder

最后,通过在JsonTypeResolverBuilder中使用DeserializationProblemHandler反序列化上下文,我在自定义findContextualValueDeserializer()handleUnknownProperty()的组合中获得了部分成功。但这看起来非常肮脏,而且序列化也有这样的问题。

更新1: 在拒绝BeanDeserialzerModifier之前,现在我想知道是否有办法修改一些东西来解决这个问题?

0 个答案:

没有答案