我正在尝试使用 GSON 将 Map 序列化/反序列化为 JSON
我有一个由
定义的 mapHashMap<Test, List<Something>> map =
new HashMap<>();
其中包括两个定义如下的简单类
class Test {
public Test(){}
public Test(String str){test = str;}
String test;
}
class Something {
public Something(){}
public Something(String str){something = str;}
String something;
}
和一些像这样的测试代码
List<Something> somelist = new ArrayList<Something>();
somelist.add(new Something("something1"));
somelist.add(new Something("something2"));
map.put(new Test("test1"), somelist);
Gson 似乎无法默认序列化它并产生以下结果
{
"test.TestJsonClass$Test@15db9742": [
{
"string": "something1"
},
{
"string": "something2"
}
]
}
这在某种程度上是预料之中的,但是,我然后尝试为这样的类创建一个自定义序列化器
Gson gson = new GsonBuilder().setPrettyPrinting()
.registerTypeAdapter(Test.class, new JsonSerializer<Test>() {
public JsonElement serialize(Test arg0, Type arg1,
JsonSerializationContext arg2) {
return new JsonPrimitive(arg0.test);
}
}).registerTypeAdapter(Something.class, new JsonSerializer<Something>() {
@Override
public JsonElement serialize(Something arg0, Type arg1,
JsonSerializationContext arg2) {
return new JsonPrimitive(arg0.something);
}
}).create();
这正确地序列化了值(某物),但 Gson 似乎忽略了我的 key (测试)序列化器并产生以下结果
{
"test.TestJsonClass$Test@15db9742": [
"something1",
"something2"
]
}
如何让 Gson 正确序列化我的 key ?
最佳答案
我发现的最简单的方法似乎是在最初构建 Gson 对象时设置enableComplexMapKeySerialization() 选项。
这迫使 Gson 使用标准规则序列化键,而不是仅仅调用 toString() 。然后,您可以根据需要添加自己的序列化器/反序列化器,或者让 Gson 处理它。
更多信息here
关于java - Gson 忽略映射中键的自定义序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25004418/