Kotlin Moshi将包含空值

时间:2019-12-18 17:37:02

标签: json kotlin moshi

我正在使用Moshi对项目中的json对象进行序列化/反序列化。 但是我在json中包含具有空值的变量时遇到了麻烦。

我希望输出为

  

正在测试{“ username”:“ a”,“ password”:“ 1234”,“ site_id”,null ,“ is_new_device”:true}

但是是

  

正在测试{“ username”:“ a”,“ password”:“ 1234”,“ is_new_device”:true}

class ExampleInstrumentedTest {

    lateinit var moshi: Moshi
    lateinit var adapter: JsonAdapter<LoginUser>

    @Before
    fun init() {
        moshi = Moshi.Builder()
            .add(KotlinJsonAdapterFactory())
            .add(NullToEmptyStringAdapter())
            .add(LoginUserAdapter())
            .build()
    }


    @Test
    fun testNull() {
        Log.d("TEST","Testing Started")
        adapter =   moshi.adapter(LoginUser::class.java)
        val loginUser = LoginUser("a", "1234", null, true)
        var item = adapter?.toJson(loginUser)
        Log.d("TEST","Testing"+item)
    }
}

class LoginUserAdapter {

    @ToJson
    fun toJson(loginUser: LoginUser): Map<String, Any?> {
        val map = HashMap<String, Any?>()
        map["username"] = loginUser.username
        map["password"] = loginUser.password
        map["site_id"] = loginUser.siteId
        map["is_new_device"] = loginUser.isNewDevice
        return map
    }

    @FromJson
    fun fromJson(loginUser: String): LoginUser {
        return GsonBuilder().create().fromJson(loginUser, LoginUser::class.java)
    }
}

我尝试了各种组合来更改将适配器添加到moshi Builder的顺序,但是没有用。尝试更改模型中站点ID的返回值。

data class LoginUser(
    @SerializedName("username") @Json(name = "username") var username: String,
    @SerializedName("password") @Json(name = "password") var password: String,
    @SerializedName("site_id") @Json(name = "site_id") var _siteId: String?,
    @SerializedName("is_new_device") @Json(name = "is_new_device") var isNewDevice: Boolean?
) : Parcelable {
    val siteId
        get() = _siteId ?: null
}

那也不起作用。

0 个答案:

没有答案