我想序列化一个包含HashMap的类,并且hHashHap有一个类键。 但它出错了。
public class Buyer {
private long wallet;
private HashMap<Discount, Integer> discountCodes;
}
当我使用 toJson 方法时
"discountCodes":{"model.Discount@18769467":1,"model.Discount@1cf4f579":2}
它像这样序列化,所以在反序列化导致错误
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 34 path $[0].discountCodes.
我的意思是如何将买方的对象转换为json 而不转换哈希映射
- 将包含泛型类型的哈希映射序列化为 JSON
HashMap<Integer, Employee> employeeMap = new HashMap<>();
employeeMap.put(1, new Employee(1l, "Alex", LocalDate.of(1990, 01, 01)));
employeeMap.put(2, new Employee(2l, "Bob", LocalDate.of(1990, 02, 01)));
//Deep clone
Gson gson = new Gson();
String jsonString = gson.toJson(employeeMap);
生成的 json:
{
"1": {
"id": 1,
"name": "Alex",
"dob": {
"year": 1990,
"month": 1,
"day": 1
}
},
"2": {
"id": 2,
"name": "Bob",
"dob": {
"year": 1990,
"month": 2,
"day": 1
}
}
}
- >将 JSON 转换为包含自定义对象的哈希映射
HashMap<Integer, Employee> employeeMap = new HashMap<>();
employeeMap.put(1, new Employee(1l, "Alex", LocalDate.of(1990, 01, 01)));
employeeMap.put(2, new Employee(2l, "Bob", LocalDate.of(1990, 02, 01)));
//Deep clone
Gson gson = new Gson();
String jsonString = gson.toJson(employeeMap);
Type type = new TypeToken<HashMap<Integer, Employee>>(){}.getType();
HashMap<Integer, Employee> clonedMap = gson.fromJson(jsonString, type);