我有一个非常简单的Jackson代码来反序列化嵌套的JSON对象:
public class MapTest
{
public static void main(String ... args) throws Exception
{
final String ser = "{\"nested\":{\"k1\":\"v1\",\"k2\":\"v2\",\"k3\":\"v3\"}}";
final Map<String, Object> deser = new ObjectMapper().readValue(ser, new TypeReference<TreeMap<String, Object>>(){});
System.out.println("Class of deser's nested object is " + deser.get("nested").getClass().getSimpleName());
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我获得以下输出:
Class of deser's nested object is LinkedHashMap
Run Code Online (Sandbox Code Playgroud)
但是我想将嵌套映射反序列化为输出TreeMap
而不是LinkedHashMap
输出.我如何告诉杰克逊TreeMap
在反序列化时默认使用?
通过文档阅读我发现的最接近的事情是能够通过addAbstractTypeMapping()
模块为抽象类型定义具体类,但我尝试了每个超类和实例LinkedHashMap
尝试这样做,似乎没有任何工作.
这是使用Jackson 2.4.2,虽然如果有一种方法可以做到这一点,需要更高的版本,我将能够升级.
模块addAbstractTypeMapping()
确实是一般实现映射的方式。但问题可能是由于反序列化的递归性质造成的;因为内部值被认为是类型java.lang.Object
。
Map
然而,我认为 2.5 中确实对此部分进行了修复,所以一旦您添加了从到 的抽象映射,我会专门检查 2.5.0 是否可以工作TreeMap
。如果这不起作用,请在https://github.com/FasterXML/jackson-databind/issues上提交错误,因为它应该可以工作。
归档时间: |
|
查看次数: |
1393 次 |
最近记录: |