我在ROOM tutorial and at some point下面,我们需要为ROOM创建类型转换器。GSON被用来解析JSON。
为了实现这一点,我们首先创建了这个通用接口,它包含2个函数,用于从JSON字符串获取对象或将对象解析为JSON字符串。这是为了防止您决定切换到不同的库来解析JSON字符串。
interface JsonParser {
//takes the actual JSON String and return an object of our type
fun <T> fromJson(json: String, type: Type): T?
//takes our object and return JSON String
fun <T> toJson(obj: T, type: Type): String?
}
下一步是创建使用GSON的上述接口的实现。
//JsonParser implementation
class GsonParser (private val gson: Gson):JsonParser {
override fun <T> fromJson(json: String, type: Type): T? {
return gson.fromJson(json,type)
}
override fun <T> toJson(obj: T, type: Type): String? {
return gson.toJson(obj,type)
}
}
对于我的例子,我也希望用莫希来做同样的事情。不幸的是,Moshi没有toJson()
或fromJson()
方法。
我试过寻找相当于GSON的toJson()
和fromJson()
的莫希方法,但是我什么都没有得到。我该怎么做呢?
2条答案
按热度按时间brgchamk1#
我仔细阅读了@CommonsWare提供的关于他上述评论的莫希文档”
解决方案是首先将
Moshi/Retrofit
的依赖项添加到项目中。然后创建一个实现JsonParser接口的类名
MoshiParser
,并初始化Moshi
。为了使莫希的注解能够在Kotlin中正常工作,只需在Moshi Builder上添加KotlinJsonAdapterFactory
。下一个项目是使用莫希的JsonAdapter,它接受
<T>
的泛型类型。velaa5lx2#
这是我和莫希的分机号
您可以在gist -Gist Link上找到更多信息