我是一名有用的助手,可以帮您进行文本翻译。
我正在尝试使用GSON将Map序列化/反序列化为JSON。
我有一个由以下定义的Map:
HashMap<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();
这个方法正确地序列化了值(Something),但 Gson 似乎忽略了我的键(Test)的序列化器,导致产生以下结果。
{
"test.TestJsonClass$Test@15db9742": [
"something1",
"something2"
]
}
我该如何使Gson正确地序列化我的键?