2016-11-12 118 views
-1
的反序列化

假设我有以下结构:系列化和儿童

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); 

Recieving结束

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

这里的问题是我需要发送b ar1/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的类型,但没有能够解析回来也没有办法知道的类型。

+0

不清楚你在问什么。 'GSon.fromJson()'返回一个你忽略的值,那么它怎么会有一个问题呢? – EJP

+0

我不会无视它!根据参数中的对象,它返回该对象。问题是我不知道Json收到的是什么对象。 – Gabrielus

+0

'gson.fromJson(gsonString,bar1);'不会将结果存储到变量中,* ergo *它会忽略它。 – EJP

回答

2

如果您存储这样的富类型:当接收

private String fqcn; 

的,你可以先做的JSON字符串的字符串搜索,提取完全合格的类名。然后你可以使用:

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

你可以尝试解析try-catch块中的类。当抛出异常时,抓住它并再次尝试将其解析到下一个类。

+0

downvotes可能有2个原因:1)Gson不抛出错误,当某些东西不能完全解析成一个对象2)不是很好的做法 – Gabrielus

+0

我很欣赏你的输入,虽然:) – Gabrielus