Java Gson-如何根据不同字段的值序列化/反序列化字段?
我们有相当大的班级:Java Gson-如何根据不同字段的值序列化/反序列化字段?,java,gson,Java,Gson,我们有相当大的班级: class Foo { // ... many fields @Expose @JsonAdapter(DateAdapter.class) Date start; @Expose String startTimeZone; // ... more fields } 现在,在本地,start的值存储为UTC,时区信息单独存储在startTimeZone中。但是,在向服务器发送数据时,我们需要将start转换为sta
class Foo {
// ... many fields
@Expose
@JsonAdapter(DateAdapter.class)
Date start;
@Expose
String startTimeZone;
// ... more fields
}
现在,在本地,start的值存储为UTC,时区信息单独存储在startTimeZone中。但是,在向服务器发送数据时,我们需要将start转换为startTimeZone,并将其格式化为字符串“YYYY-mm-dd HH:mm:ss”
我们有一节约会后的课
public class DateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
return DateUtils.parseServerDateTime(json.getAsString);
}
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(DateUtils.formatServerDateTime(src));
}
}
公共类DateAdapter实现JsonSerializer、JsonDeserializer{
@凌驾
公共日期反序列化(JsonElement json,类型typeOfT,JsonDeserializationContext)
抛出JsonParseException{
return DateUtils.parseServerDateTime(json.getAsString);
}
@凌驾
公共JsonElement序列化(日期src、类型typeOfSrc、JsonSerializationContext){
返回新的JsonPrimitive(DateUtils.formatServerDateTime(src));
}
}
但是,在DateAdapter中,我们无法访问startTimeZone字段,因此无法将其用于格式化/解析
我知道我们可以为整个类编写一个自定义适配器,但是如上所述,这个类相当大,所以我希望有一个不同的解决方案。也许可以为整个类创建一个自定义适配器,调用
context.serialize()
在它内部序列化所有其他内容并以不同方式处理startTimeZone
?@Pateman感谢您的提示,我不知道这是可能的。似乎是完美的解决方案。我将在星期一试一试。“如果你把你的评论作为一个答案发表,我很乐意接受它,如果它行得通的话。”帕特曼不幸的是,你的想法行不通。在serialize中调用context.serialize()会导致无限循环,最终导致堆栈溢出。它可能与人工父类一起工作,但我的类是RealmObject,它们不允许继承:-/所以不能创建一个字段是对要序列化的类的引用的类?类似于class Foo{private instance;}
?@Pateman的东西你是说像一个包装器?这可能会起作用,但我必须更改所有代码,使其不使用类,而是使用包装器。。。与foo.getStart()类似,它必须是wrapper.getFoo().getStart()。。。