【发布时间】:2015-07-11 07:57:44
【问题描述】:
我有一个复杂的对象,对于一些嵌套对象,我需要将它们序列化为 JSON 字段而不是 JSON 对象。
例如。
public class Outer {
private String someField;
private AnotherClass anotherField;
}
public class AnotherClass {
@XmlElement(name = "useThisName")
private String someField;
private String anotherField;
}
如何为嵌套对象创建一个自定义序列化程序并遵守注释,以便正确命名字段?
我的用例是使用ObjectMapper.convertValue() 方法创建一个Map,这样我就可以遍历它并创建NameValuePairs 作为一个休息网址。
最后我希望得到一个
Map<String, String>
我可以循环并从中创建 apache BasicNameValuePairs。
如果我能正确序列化所有内容,下面是我想用于最终结果的一些代码。
Map<String, String> parameters
= DefaultJacksonMapper.getDefaultJacksonMapper().convertValue(obj, LinkedHashMap.class);
return parameters
.entrySet()
.stream()
.map(entry -> new BasicNameValuePair(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
如果我现在将其转换为地图,我的输出如下:
"someField" -> "data"
"anotherField" -> "size = 2"
我正在尝试让Map 获得以下输出,我觉得我需要一个自定义序列化程序。
"someField" -> "data"
"useThisName" -> "data"
"anotherField" -> "data"
【问题讨论】:
-
问题在哪里?
-
我添加了它。对不起,我分心了。
-
但是当你将JSON反序列化回Object时,它不会反映原始结构。为什么要将所有嵌套字段组合成单个 JSON 对象?如果您能详细说明您的要求,我们可能会尝试提出更好的解决方案。
-
我把它放在底部。我无意反序列化它。我想要一个 HashMap,我可以循环并转换为 URL 的查询参数。
标签: java serialization jackson