如何使用 Java 和 Jackson 库对 Json 字符串进行多态反序列化?
我有一些类 A、B、C,它们都继承自 BaseClass 类。
我有一个字符串 json,其中包含 A、B、C 或 BaseClass 的 json 表示形式。
我想要有某种方法将此字符串反序列化为 BaseClass(多态反序列化)。像这样的
BaseClass base = ObjectMapper.readValue(jsonString, BaseClass.class);
jsonString
可以是 A、B、C 或 BaseClass 中任何一个的 Json 字符串表示形式。
I've some classes A, B, C they all inherit from class BaseClass.
I've a String json that contains the json representation of the A, B, C or BaseClass.
I want to have some way to deserialize this String to the BaseClass (polymorphic deserialization). Something like this
BaseClass base = ObjectMapper.readValue(jsonString, BaseClass.class);
jsonString
could be Json String representation of any of A, B, C, or BaseClass.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
目前尚不清楚原始发帖人遇到了什么问题。我猜测这是以下两件事之一:
未绑定 JSON 元素的反序列化问题,因为 JSON 包含 Java 中没有任何内容可以绑定的元素;或
想要实现多态反序列化。
这是第一个问题的解决方案。
这是第二个问题的解决方案。
相反,如果目标是反序列化为子类类型,而没有专门用于指示子类类型的 JSON 元素,那么这也是可能的,只要可以使用 JSON 中的某些内容来决定子类类型应该是什么。我在 http://programmerbruce 上发布了此方法的示例.blogspot.com/2011/05/deserialize-json-with-jackson-into.html。
It's not clear what problem the original poster is having. I'm guessing that it's one of two things:
Deserialization problems with unbound JSON elements, because the JSON contains elements for which there is nothing in the Java to bind to; or
Want to implement polymorphic deserialization.
Here's a solution to the first problem.
Here's a solution to the second problem.
If instead, the goal is to deserialize to a subclass type without a JSON element specifically dedicated to indicate what the subclass type is, then that is also possible, so long as something in the JSON can be used to decide what the subclass type should be. I posted an example of this approach at http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html.
你看过Google的Gson库吗?我认为它符合您的要求。
http://code.google.com/p/google-gson/
Have you looked at Google's Gson library? I think it does what you're looking for.
http://code.google.com/p/google-gson/