date - 如何使用 GSON 反序列化> 对象
问题描述
我的问题很简单。我必须实现一些 TypeConverters 来管理 Android 中 Room 数据库的数据。
我可以将 Range< Date>> 序列化为字符串以进行存储。我正在使用简单的方法:
@TypeConverter
fun rangeToString(range: Range <Date>?): String {
val gson = Gson()
return gson.toJson(range)
}
但是当我尝试通过相反的过程取回相同的信息时:
@TypeConverter
fun stringToRange(value: String): Range <Date>? {
val mapType = object: TypeToken<Range <Date>?>() {}.type
return Gson().fromJson (value, mapType)
}
我收到一个错误:无法为 java.util.Comparator <java.util.Date> 调用无参数构造函数。向 Gson 注册此类型的 InstanceCreator 可能会解决此问题。
我知道问题是 GSON 不知道如何用日期实例化范围。我认为也许如果我使用自定义 registerTypeAdapter 或类似的东西可以解决问题,但我没有找到方法。
任何想法?谢谢!
解决方案
让我们更容易。我无法弄清楚如何反序列化 Range<Date>,但我已经解决了它更改 Pair<Date, Date> 的对象。
我的新的最终和简单的 TypeConverters:
@TypeConverter
fun stringToRange(value: String): Pair<Date, Date>? {
val mapType = object : TypeToken<Pair<Date, Date>?>() {}.type
return Gson().fromJson(value, mapType)
}
@TypeConverter
fun rangeToString(range: Pair<Date, Date>?): String {
val gson = Gson()
return gson.toJson(range)
}
你可以很容易地改变你的 Range< Date> 做:
Pair(dateRange.minimum, dateRange.maximum)
使用此解决方案,我没有回答我的问题,但这是解决问题的另一种方法。
推荐阅读
- amazon-web-services - 亚马逊列表数据导入
- java - 尝试在处理游戏时打印高分并将其保存到外部文件中以再次读取
- c - 如果 stdout 被调用 exec 的进程关闭,如何重新打开它
- c# - 将 JSON 反序列化为包含两个 Dictionary 属性的 C# 类
- javascript - 使用 react-responsive 动态设置 React 媒体查询
- java - 如何在 Spring 上有条件地创建 @Controller 和 @Service 实例
- php - 如何链接我的产品以使其属于特定客户 - MYSQL
- c# - 如何使用c#获取sharepoint第一个文件的href和标签以及如何下载sharepoint的第一个文件
- python - 如何通过其他列值在一行中绘制两种颜色?
- javascript - Angular 中的无效 url 应该在重定向之前检查一些条件