好的,我有一个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
,我会问,为什么它表现不同以及我如何解决这个问题。
答案 0 :(得分:2)
我认为在enableComplexMapKeySerialization()
上调用Gson.Builder
应该可以解决问题。来自the Gson documentation:
如果映射键是序列化JSON格式的复杂类型(即非原始类型),则启用此功能将仅更改序列化表单。映射序列化的默认实现在键上使用toString();但是,当调用它时,则下列情况之一适用......
此外,如果您打算稍后反序列化JSON,您应该阅读以下答案:https://stackoverflow.com/a/14677564/763935