【发布时间】:2012-01-25 20:36:52
【问题描述】:
我在 jackson 中有一个 bean,它使用 @JSonAnySetter 方法将所有未知参数存储在地图中。
@JSonAnySetter
handleUnkowns(String k, Object v)
{
myMap.put(k,v);
}
我将它用作我所有数据类型的“基础 bean”,因此如果数据丢失,未知参数会被填充并且数据不会丢失......而不是杰克逊崩溃。
但是,我希望这些未知数的序列化形式不被嵌套 - 也就是说 - 当对象被序列化时,我希望序列化参数位于对象的顶层。此外,我希望自定义字段也被序列化:
//I want this map to be serialized/deserialized : {"collarWidth":10 "name":"fido"}
class Dog extens JSonBean
{
int collarWidth=0;
getCollarWidth(){return collarWidth;}
setCollarWidth(int x){collarWidth=x;}
}
请注意,在上述情况下 - 由于我从 Map 扩展,Jackson 的自定义 Map 序列化将发生,并且 unknownParameters 将是我的 json 中的“字段”。
因此预期的 JSON 序列化将是
{"collarWidth":10 "unknownParameters":{"name":"fido"}}
而不是
{"collarWidth":10 "name":"fido"}
那么 - 将未知参数与已知参数“合并”的最简单方法是什么,以便 java bean 序列化程序保留与输入字符串相同的嵌套?
显而易见的解决方案是将“myMap”对象中的参数与序列化地图合并,但这似乎有点过头了,我认为这个问题可能有一个更优雅的解决方案。
【问题讨论】:
-
没关系:我想通了,把它放在'ol电子日记上:jayunit100.blogspot.com/2012/01/lossless-json-reflection.html
-
...好吧...我的解决方案有点不雅。使用自定义序列化程序然后手动编辑地图可能会更好。因此,任何类似的答案都会非常有帮助。
标签: java reflection map jackson