将json的日期属性反序列化为LocalDate

Posted

技术标签:

【中文标题】将json的日期属性反序列化为LocalDate【英文标题】:Deserialize date attribute of json into LocalDate 【发布时间】:2018-12-13 12:04:00 【问题描述】:

我正在尝试使用 Gson 对格式为“2018-05-27”的 json 中的日期属性进行反序列化。我希望反序列化后日期为 LocalDate 格式。

对于 json 输入:

“身份证”:1, “名称”:“测试”, “开始日期”:“2018-01-01”, “结束日期”:“2018-01-05”,

startDate 和 endDate 出现错误:

java.lang.IllegalStateException: 应为 BEGIN_OBJECT 但为 STRING

【问题讨论】:

Java 8 LocalDateTime deserialized using Gson的可能重复 "当您反序列化 LocalDate[Time] 属性时会发生错误,因为 GSON 无法解析该属性的值,因为它不知道 LocalDate[Time] 对象。" 【参考方案1】:

我们可以这样做:

private static final Gson gson = new GsonBuilder().registerTypeAdapter(LocalDate.class, new JsonDeserializer<LocalDate>() 
            @Override
            public LocalDate deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException 
                return LocalDate.parse(json.getAsJsonPrimitive().getAsString());
            
        ).create();

然后

YourClassName yourClassObject = gson.fromJson(msg, YourClassName.class);

【讨论】:

以上是关于将json的日期属性反序列化为LocalDate的主要内容,如果未能解决你的问题,请参考以下文章

Jackson 将日期字符串反序列化为 Long

Spring boot:JSON将带有时区的日期和时间反序列化为LocalDateTime

Spring Boot LocalDate 字段序列化和反序列化

如何使用客户端的时区将 asp.net 日期时间反序列化为 JSON 日期时间

将 json utc 日期从 jira api 反序列化为 .net 日期时间

将 JSON 命名属性反序列化为 .Net 对象