Java日历的序列化



如何通过扩展json serializer<Calendar>为javaCalendar创建到json的自定义序列化?

我在java.until.Date上也试过同样的方法,效果很好。在序列化方法中,我将Date转换为String,并以json格式编写它。

java.util.Date的示例代码与下面给出的代码相似

  public class CDJsonDateSerializer extends JsonSerializer<Date>{
  @Override
  public void serialize(Date date, JsonGenerator jsonGenerator,SerializerProvider provider)
 throws IOException {
      SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
      String dateString = dateFormat.format(date);
     jsonGenerator.writeString(dateString);
 }
}

它是这样使用的:

 @JsonSerialize(using = CDJsonDateSerializer.class)
 private Date startDate;

在不丢失Calendar对象中数据的情况下,我能为将java中的Calendar序列化为json做些什么?

从JSON到Calendar

创建JsonSerializer:

public class CalendarSerializer extends JsonSerializer<Calendar> {
    private SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
    @Override
    public void serialize(Calendar calendar, JsonGenerator jsonGenerator,
                          SerializerProvider serializerProvider) throws IOException {
        String dateAsString = formatter.format(calendar.getTime());
        jsonGenerator.writeString(dateAsString);
    }
}

然后使用它:

@JsonSerialize(using = CalendarSerializer.class)
private Calendar calendar;

Calendar到JSON

创建JsonDeserializer:

public class CalendarDeserializer extends JsonDeserializer<Calendar> {
    private SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
    @Override
    public Calendar deserialize(JsonParser jsonParser,
                                DeserializationContext deserializationContext) 
                                throws IOException {
        String dateAsString = jsonParser.getText();
        try {
            Date date = formatter.parse(dateAsString);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            return calendar;
        } catch (Exception e) {
            throw new IOException(e);
        }
    }

然后使用它:

@JsonDeserialize(using = CalendarDeserializer.class)
private Calendar calendar;

如果json中唯一需要的数据是日期,则可以使用Gson:

JsonObject albums = new JsonObject();
albums.addProperty("date", new Date());

如果您的json不止于此,那么您可以考虑定义自己的类,并通过将此方法添加到已定义的类中来序列化它:

public String toJson() {
        Gson gson = new Gson();
        return gson.toJson(this);
    }

相关内容

  • 没有找到相关文章

最新更新