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;

}

PageItemNewsprovider并且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

回到顶部