首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂键映射的Genson序列化

复杂键映射的Genson序列化
EN

Stack Overflow用户
提问于 2015-05-05 15:57:40
回答 1查看 879关注 0票数 1

Genson主页上列出的特征之一是“具有复杂键的地图的序列化和反序列化”。

当我试图将带有Keys的映射序列化为复杂的java对象时,将其序列化为json字符串,然后将它们反序列化为java。反序列化映射键始终是字符串。有人能帮助我如何使用genson这样复杂的键映射序列化和反序列化吗?

这是我的密码

代码语言:javascript
复制
    Genson genson = new GensonBuilder().useClassMetadata(true).useRuntimeType(true).create();
    VO vo = new VO();
    Key key = new Key(18314212, new Timestamp(System.currentTimeMillis()),new Timestamp(System.currentTimeMillis()));
    vo.setEndTime(new Timestamp(System.currentTimeMillis()));
    vo.setStartTime(new Timestamp(System.currentTimeMillis()));
    vo.setItemID(18314212);
    vo.setKey(key);
    Map<Object, Object> map = new HashMap<Object, Object>();
    map.put(key, vo);
    String json  = genson.serialize(map);
    System.out.println(json); //the json map key does not have @Class attribute 
    Map jsonMap =  genson.deserialize(json, Map.class);
    System.out.println(jsonMap);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 16:40:38

有几件事你必须知道,json不允许键不是字符串。所以Genson会做两件事之一:

  • 如果键是某种基本类型(比如原语),那么它就会将其作为字符串进行查询。
  • 如果键是一个复杂的对象,在您的情况下,它将作为:{ key :{},value:{}}

现在,当类型未知时,它将在键上使用toString方法,我打开了一个在此发行

因此,在您的例子中,修复方法是按如下方式输入地图:

代码语言:javascript
复制
genson.serialize(m, new GenericType<Map<Key, Value>>(){});
genson.deserialize(json, new GenericType<Map<Key, Value>>(){});

但是,请注意,还需要在GensonBuilder中禁用runtimeType。因为当您启用它时,它只会忽略序列化期间定义的类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30057860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档