儿童的序列化和反序列化

时间:2016-11-12 09:34:30

标签: java json serialization gson deserialization

我们假设我有以下结构:

abstract class foo{}
class bar1 extends foo{
     int demo1 = 0;
}
class bar2 extends foo{
     int demo1 = 0;
     int demo2 = 0;
}
class bar3 extends foo{}

通常当我需要发送Json时,我使用以下代码

Gson gson = new Gson()
gson.toJson(bar1);

接收结束

Gson gson = new Gson()
bar1 test = gson.fromJson(gsonString, bar1);

这里的问题是我需要发送bar1 / bar2 / bar3并取回原始对象 - 含义我不知道当前的JSON应该被解析回。由于bar1 / bar2 / bar3的数组正在被发回,因此增加了另一层复杂性。

前:

//Issue: is the second param bar1 bar2 or bar3?
//I put a questionmark where the issues occur, due to the fact 
//that I wouldn't know on the recieving side whether I'm going 
//to recieve bar1/bar2/bar3
? test = gson.fromJson(gsonString, ?);

我尝试将类型存储在foo中,但是无法解析它就无法知道类型。

1 个答案:

答案 0 :(得分:2)

如果您将类型存储在Foo中:

private String fqcn; 

您可以在接收时首先对json字符串执行字符串搜索,以提取完全限定的类名。然后你可以使用:

Foo test = gson.fromJson(gsonString, Class.forName( foundFqcn);