java使用JSON反序列化程序,如何更改超类字段的映射?
我正在使用一个抽象类管理一个数据库,这个抽象类有很多方便的方法。特别是,它有insert(Context)
、update(Context)
和delete(Context)
,这意味着您可以创建一组继承此类的不同对象,所有这些对象都有自己的数据库映射,只需逐个更新或插入它们
另一个开发人员已将GSON反序列化标记添加到此结构中。除了更新函数依赖于比较对象的唯一标识符之外,这工作正常;用作标识符的特定对象因对象而异。这意味着,在中包含update(...)
方法的超类
@SerializedName("id")
protected String mUUID;
子类将需要不同的映射
目前,我通过重写子类中的update(...)
方法来解决这个问题,以便使用不同的标识字段进行比较,但这是非常不令人满意的。是否可以将不同的序列化名称映射到GSON中的超类字段,如果可以,如何实现
为了澄清,班级结构大致如下
public abstract class DatabasePersistent {
//...
@SerializedName("id")
protected String mUUID;
//...
public int update(Context context) {
return context.getContentResolver().update(
getContentProviderURI(), //abstract, allows objects to update the right table
toContentValues(), //abstract, converts the object to a ContentValues
UUID_EQUALS, //this is a where clause string
new String[]{mUUID}
);
}
}
我想做一个决定
public class Thing extends DatabasePersistent {
//all the abstract implementations
//and so on
}
它以某种方式改变了mUUID的映射,因此我可以使用与超类中相同的主ID机制(例如update方法),但在传入的JSON中有不同的字段来标识不同的对象
# 1 楼答案
我认为它会有一些属性,比如字符串customID、字符串foo、字符串bar,这些属性都是从传入的JSON映射而来的
如果您能以某种方式覆盖每个成员变量的setter——可能是一个生命周期事件,或者如果您在类中提供了一个setCustomID(字符串customID),GSON会使用它而不是注释吗?然后你可以直接打电话给super。setId(customID)
这就像一个“动态”或“计算”字段
这篇帖子表明GSON不太可能支持属性设置/获取
Why does GSON use fields and not getters/setters?