我是 Moshi 的新手,我正在考虑实施它来替换我的 Gson 库。 无法弄清楚如何将模型类转换为 JSON 格式的字符串。
我的模型是 UiGeneralCategory
我有这个例子,但我觉得我有点过火了,因为有些东西不符合。
好的,
val jsonAdapter: JsonAdapter = moshi.adapter(UiGeneralCategory::class.java)
有效,现在我必须替换模型中的所有 ArrayLists 并测试它
你必须导入扩展功能:
import com.squareup.moshi.adapter
这个问题也出现在这里。显然这是一个 IntelliJ 错误,因为代码完成(当按下 Ctrl + Space 时)正确地建议了扩展功能。由于某种原因,只有您显示的错误对话框不建议扩展功能。
好的,这是我的 toJson/fromJson 转换类(带有通用对象), 它仅使用 Moshi 生成器的一个实例进行优化(据我所见,大约是 400-500 毫秒)
import android.util.Log
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import java.lang.reflect.Type
class MoshiHelper {
private var mMoshiInstance: Moshi = getMoshi()
private fun getMoshi(): Moshi {
Log.d("testMoshiInstance112", "initialized ")
return Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
}
companion object {
private var mInstance: MoshiHelper? = null
fun getInstance(): MoshiHelper {
if (mInstance == null) {
mInstance = MoshiHelper()
}
return mInstance!!
}
}
fun <T> moshiFromJson(json: String, type: Type): T {
//use jsonAdapter<T> for generic adapter
val jsonAdapter: JsonAdapter<T> = mMoshiInstance.adapter(type)
return jsonAdapter.fromJson(json)!!
}
fun <T> moshiToJson(obj: T, type: Type): String {
//use jsonAdapter<T> for generic adapter
val jsonAdapter: JsonAdapter<T> = mMoshiInstance.adapter(type)
return jsonAdapter.toJson(obj)
}
}
以及用法:
var mMoshiHelper = MoshiHelper.getInstance()
var mPayload: String = mMoshiHelper.moshiToJson(it, UiMyLocalModel::class.java)
var mUiLocalModel: UiMyLocalModel = mMoshiHelper.moshiFromJson(mPayload, UiMyLocalModel::class.java)