我正在使用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
}
那也不起作用。