如何使用Gson将不同的java DateTime对象序列化为String值?

sycxhyv7  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(159)

我正在编辑一些JSON文件,我将它们反序列化为java对象,编辑,然后用Gson将它们写回JSON格式。
但是我的所有日期时间对象都变成了层次对象,而不是我需要的字符串表示。
之前(偏移日期时间):

"date": "2000-04-26T10:10:00Z"

在反序列化、编辑和再次反序列化之后:

"date":{
        "dateTime":{
          "date":{
            "year":2000,
            "month":1,
            "day":1
          },
          "time":{
            "hour":0,
            "minute":0,
            "second":0,
            "nano":0
          }
        },
        "offset":{
          "totalSeconds":0
        }
      }

接下来是我的原始序列化代码:

Gson gson = new GsonBuilder()
            .serializeNulls()             
            .create();

String json = gson.toJson(myObject);

我已经尝试了所有的解决方案在这个问题:GSON -日期格式但它们都没有改变什么,我以为是同一个问题,但现在我觉得我的问题不一样了,java有很大的变化,自从2011年这个问题被问到。
下面是我尝试添加到GsonBuilder中的代码行的具体示例:

.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
...
.setDateFormat(DateFormat.LONG)
...
.setDateFormat(DateFormat.FULL, DateFormat.FULL)

还有很多,没什么区别.
如何让Gson将不同的Java日期对象序列化为字符串表示?

z31licg0

z31licg01#

在阅读了关于这个问题的评论后,指出Gson上没有对此的本机支持,我决定寻找其他库。
我使用com.fasterxml.jackson.databind.ObjectMapper.java轻松地实现了目标

ObjectMapper mapper = new ObjectMapper()
    .registerModule(new JavaTimeModule())
    .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

json = mapper.writeValueAsString(myObject);

相关问题