Gson:改变Map-Keys的序列化方式

时间:2016-02-01 20:30:58

标签: java serialization gson

好的,我有一个Map<Vector3i,String>我要保存,问题是,我只需要x,z值,所以结果应该是这样的:

{
  "1,2": "test"
  "13,5": "test"
  "9,4": "test"
}

那是我的JsonSerializer<Vector3i>

public class Vector3iAdapter implements JsonSerializer<Vector3i> {
     @Override
     public JsonElement serialize(Vector3i src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src.getX()+","+ src.getZ());
     }
}

但这就是输出的样子:

{
  "(1, 0, 2)": "test"
  "(13, 0, 5)": "test"
  "(9, 0, 4)": "test"
}

由于序列化Vector3i Map不能正常工作catch,我会问,为什么它表现不同以及我如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

我认为在enableComplexMapKeySerialization()上调用Gson.Builder应该可以解决问题。来自the Gson documentation:

  

如果映射键是序列化JSON格式的复杂类型(即非原始类型),则启用此功能将仅更改序列化表单。映射序列化的默认实现在键上使用toString();但是,当调用它时,则下列情况之一适用......

此外,如果您打算稍后反序列化JSON,您应该阅读以下答案:https://stackoverflow.com/a/14677564/763935