Java日历的序列化

Ada*_*han 6 java json java-ee fasterxml

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

我尝试了相同的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);
 }
}
Run Code Online (Sandbox Code Playgroud)

它是这样使用的:

 @JsonSerialize(using = CDJsonDateSerializer.class)
 private Date startDate;
Run Code Online (Sandbox Code Playgroud)

如何在java到json中序列化日历而不丢失Calendar对象中的数据?

cas*_*lin 9

从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);

    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

@JsonSerialize(using = CalendarSerializer.class)
private Calendar calendar;
Run Code Online (Sandbox Code Playgroud)

CalendarJSON到

创建一个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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后使用它:

@JsonDeserialize(using = CalendarDeserializer.class)
private Calendar calendar;
Run Code Online (Sandbox Code Playgroud)