我正在尝试序列化一个定义了两个Date
字段的类:
import com.google.gson.annotations.Expose;
import java.util.Date;
public class DateRange {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Expose
public Date startDate;
@Expose
public Date endDate;
public DateRange(Date startDate, Date endDate) {
this.startDate = startDate;
this.endDate = endDate;
}
public DateRange(String startDate, String endDate ) throws ParseException{
this.startDate = dateFormat.parse(startDate);
this.endDate = dateFormat.parse(endDate);
}
}
但是使用gson.toJson
会抛出多个
import com.google.gson.Gson
Gson gson = new Gson()
gson.toJson(new DateRange("2011-11-11", "2012-11-11"))
结果
java.lang.IllegalArgumentException: class java.text.DecimalFormat declares multiple JSON fields named maximumIntegerDigits
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
如果我的课程ManyDates
有一个DateRange
的字段,另一个字段的数组为DateRange
,那么问题会更加严重。我尝试将该字段添加为private transient
,但没有运气(也尝试将该字段设为String
类型)
private transient java.text.DecimalFormat maximumIntegerDigits;
但该字段仍然导致序列化问题。我不确定这个领域是从哪里来的,但我怀疑一个简单的解决方案必须是我无法看到的。
答案 0 :(得分:0)
在这种情况下,gson尝试序列化dateFormat字段。
使用@Transient
注释它