public static void main(String args[]) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("1", new A());
map.put("2", new B());
String json = new Gson().toJson(map);
Type type = new TypeToken<Map<String, Object>>(){}.getType();
map = new Gson().fromJson(json, type);
A a = (A) map.get("1");
B b = (B) map.get("2");
}
static class A {
int inum = 1;
double dnum = 1.0;
String str = "1";
}
static class B {
int inum = 2;
double dnum = 2.0;
String str = "2";
}
以下代码导致此异常:
Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to ParseJson$A
at ParseJson.main(ParseJson.java:19)
所以问题是:如何在GSON序列化和反序列化的泛型HashMap中获得正确的实例?
对象
反序列化为com.google.gson.internal.LinkedTreeMap
,因此告诉GSON
您需要A
类。
public static void main(String args[]) {
Map<String, Object> map = new HashMap<>();
map.put("1", new A());
String json = new Gson().toJson(map);
Type type = new TypeToken<Map<String, A>>() {
}.getType();
map = new Gson().fromJson(json, type);
A a = (A) map.get("1");
System.out.println(a.str);
}
static class A {
private int num1 = 1;
private double num2 = 2.0;
private String str = "String";
}
希望有帮助。
更新
public static void main(String args[]) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("1", new A());
map.put("2", new B());
String json = new Gson().toJson(map);
Type type = new TypeToken<Map<String, X>>(){}.getType();
map = new Gson().fromJson(json, type);
X a = (X) map.get("1");
X b = (X) map.get("2");
System.out.println(a.str);
System.out.println(b.str);
}
static class X {
int inum;
double dnum;
String str;
X() {
}
}
static class A extends X {
A() {
inum = 1;
dnum = 1.0;
str = "1";
}
}
static class B extends X {
B() {
inum = 2;
dnum = 2.0;
str = "2";
}
}
本文向大家介绍java对象的序列化和反序列化,包括了java对象的序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java对象的序列化和反序列化,供大家参考,具体内容如下 1. 什么是序列化 将对象转换为字节流保存起来,比如保存到文件里,并在以后还原这个对象,这种机制叫做对象序列化。(补充一句:把对象保存到永久存储设备上称为持久化) 2. 怎么实现序列化
我已经开始将一个项目从使用Java标准日期迁移到Joda DateTime。 我的项目使用XML序列化将对象保存到XML文件中。在这个特殊的例子中,我有一个Item类,它有一个DateTime属性。 在某个时候,我正在初始化对象,包括像这样的DateTime属性: 我使用XMLEncoder使用辅助类序列化项目: 显然,日期时间被保存在xml中。。。但毫无价值: 显然,它没有保存任何东西,但不,它
本文向大家介绍详解Java 对象序列化和反序列化,包括了详解Java 对象序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反。在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候。基于此,Java中对象的序列
我遇到了这个问题,无法使用JDBC使用quartz JobDataMap反序列化对象。使用RAMJobStore的代码也可以正常工作。 我只是创建了一个测试的基本类 然后是石英 在石英行业 我得到的例外是这个 JAVAlang.ClassCastException:com。文克洛瓦斯。石英建筑。无法将测试转换为com。文克洛瓦斯。石英建筑。在com上测试。文克洛瓦斯。石英建筑。建筑升级工作。在or
问题内容: 我正在寻找一种在Swift中自动序列化和反序列化类实例的方法。假设我们定义了以下类…… …和实例: 的JSON表示形式如下: 现在,这是我的问题: 我如何序列化实例并获取上面的JSON,而不必手动将类的所有属性添加到变成JSON的字典中? 我如何反序列化上面的JSON并获取静态类型为类型的实例化对象?同样,我不想手动映射属性。 这是使用Json.NET在C#中执行此操作的方法: 问题答