Cam*_*e R 1 android dynamic gson
我目前正在使用GSON将我的JSON解析为Objects.我使用的标准方式如下:
Result response= gson.fromJson(reader, Result.class);
Run Code Online (Sandbox Code Playgroud)
结果可以是具有其他复杂对象的非常复杂的对象,最多具有5个级别的复杂对象.但我对此没有任何问题.我的问题是:我希望能够在某些对象中具有灵活类型的属性.
例如 :
class Class1 {
String hello;
}
class Class2 {
String world;
}
class Class3 {
Class<?> (= class1 or class2) hello;
}
// Parsing time
Class<?> response= gson.fromJson(reader, Class3.class);
try {
Class1 ret = (Class1)response;
} catch ... {
Class2 ret = (Class2)response;
}
Run Code Online (Sandbox Code Playgroud)
希望它足够清楚.
不幸的是,最新版本的Gson(2.0)仍然没有内置的支持,可以轻松配置以提供多态反序列化.所以,如果必须使用Gson(而不是像Jackson那样具有内置支持的API - 我在http://programmerbruce.blogspot.com/2011/05/上发布了用于多态反序列化的完整示例deserialize-json-with-jackson-into.html),然后自定义反序列化处理是必要的.
对于反序列化到多态类型,必须存在JSON中的某些内容以标识要反序列化的具体类型.
一种方法是在JSON中有一个专门用于此目的的元素,其中反序列化代码根据特殊用途元素的值选择正确的类型.例如:
{"type":"Class1","hello":"Hi!"} --> deserializes to Class1 instance
{"type":"Class2","world":"Earth"} --> deserializes to Class2 instance
Run Code Online (Sandbox Code Playgroud)
另一种方法是只是打开特定JSON元素名称的存在,虽然不是原始问题中演示的try-catch块,但我只使用if语句.
有关此主题的更多信息,请参阅Gson issue 231,以及有关何时可能在Gson中包含内置多态反序列化工具的可能信息.
另一篇带有Gson 多态反序列化示例的StackOverflow.com帖子是带有gson的多态性
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |