3 回答
TA贡献1895条经验 获得超3个赞
猜猜看,这很容易!
如果您实现JsonSerializer并JsonDeserializer针对您的类型,则可以用很少的代码处理所需的部分并将其委托给Gson进行其他所有操作:
在这种情况下,最好使用a JsonSerializer而不是a TypeAdapter,原因很简单,因为序列化程序可以访问其序列化上下文。
public class PairSerializer implements JsonSerializer<Pair> {
@Override
public JsonElement serialize(final Pair value, final Type type,
final JsonSerializationContext context) {
final JsonObject jsonObj = new JsonObject();
jsonObj.add("first", context.serialize(value.getFirst()));
jsonObj.add("second", context.serialize(value.getSecond()));
return jsonObj;
}
}
这样做的主要优点(除了避免复杂的解决方法)是,您仍然可以利用可能已在主上下文中注册的其他类型的适配器和自定义序列化程序。请注意,序列化程序和适配器的注册使用完全相同的代码。
但是,我将承认,如果您经常要修改Java对象中的字段,那么Jesse的方法看起来会更好。选择易用性与灵活性之间的权衡。
添加回答
举报