Gson使用InstanceCreator反序列化嵌套对象
我有一个名为的类PageItem
,该类具有一个Context
作为参数的构造函数:
PageItem(Context context){
super(context);
this.context = context;
}
PageItem
具有以下属性:
private int id; private String Title;
private String Description;
public Newsprovider newsprovider;
public Topic topic;
Newsprovider
并且Topic
是我的应用程序的其他类,并具有以下构造函数:
Newsprovider (Context context){
super(context);
this.context = context;
}
Topic (Context context)
{
super(context);
this.context = context;
}
PageItem
,Newsprovider
并且Topic
是的子类SQLiteOpenHelper
。
我想PageItem
用Gson 反序列化数组,所以我写道:
GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.registerTypeAdapter(PageItem.class, new PageItemInstanceCreator(context));
Gson gson = gsonBuilder.create();
Pageitem pis[] = gson.fromJson(s, PageItem[].class);
以PageItemInstanceCreator
定义为:
public class PageItemInstanceCreator implements InstanceCreator<PageItem> {
private Context context;
public PageItemInstanceCreator(Context context)
{
this.context = context;
}
@Override
public PageItem createInstance(Type type)
{
PageItem pi = new PageItem(context);
return pi;
}
}
调试时,PageItem
实例具有正确的“ MainActivity”作为上下文,而其newsprovider
成员变量的上下文为null。
Gson PageItem
使用正确的构造函数创建了对象,但Newsprovider
使用默认的无参数构造函数创建了实例。我怎样才能解决这个问题?
回答:
只需为此添加一个新的InstanceCreator
派生类NewsProvider
:
public class NewsProviderInstanceCreator implements InstanceCreator<NewsProvider> {
private int context;
public NewsProviderInstanceCreator(int context)
{
this.context = context;
}
@Override
public NewsProvider createInstance(Type type)
{
NewsProvider np = new NewsProvider(context);
return np;
}
}
并将其注册到GsonBuilder
您已经完成的操作中,如下所示:
GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.registerTypeAdapter(PageItem.class, new PageItemInstanceCreator(context));
gsonBuilder.registerTypeAdapter(NewsProvider.class, new NewsProviderInstanceCreator(context));
Gson gson = gsonBuilder.create();
PageItem pis[] = gson.fromJson(s, PageItem[].class);
在Topic
课堂上也要重复。
以上是 Gson使用InstanceCreator反序列化嵌套对象 的全部内容, 来源链接: utcz.com/qa/414295.html