Gson:使用两个日期字段

时间:2017-04-14 03:34:06

标签: java json serialization gson

我正在尝试序列化一个定义了两个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;

但该字段仍然导致序列化问题。我不确定这个领域是从哪里来的,但我怀疑一个简单的解决方案必须是我无法看到的。

1 个答案:

答案 0 :(得分:0)

在这种情况下,gson尝试序列化dateFormat字段。

使用@Transient

注释它