Moshi 相当于 Gson.toJson

问题描述 投票:0回答:2

我是 Moshi 的新手,我正在考虑实施它来替换我的 Gson 库。 无法弄清楚如何将模型类转换为 JSON 格式的字符串。

我的模型是 UiGeneralCategory

我有这个例子,但我觉得我有点过火了,因为有些东西不符合。

好的,

val jsonAdapter: JsonAdapter = moshi.adapter(UiGeneralCategory::class.java)

有效,现在我必须替换模型中的所有 ArrayLists 并测试它

android kotlin gson moshi
2个回答
0
投票

你必须导入扩展功能:

import com.squareup.moshi.adapter

这个问题也出现在这里。显然这是一个 IntelliJ 错误,因为代码完成(当按下 Ctrl + Space 时)正确地建议了扩展功能。由于某种原因,只有您显示的错误对话框不建议扩展功能。


0
投票

好的,这是我的 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)
© www.soinside.com 2019 - 2024. All rights reserved.