Edited at

moshiでPOJO→JSON変換をする際にnullをシリアライズしたいときもあるよね📛

More than 1 year has passed since last update.


nullをnullのままJSONに含みたい!

data class Hoge(val foo: Int? = null,

val bar: String = "baz") : Serializable

こういうのを

{

"foo": null,
"bar": "baz"
}

こうしたい。

しかし、moshiでは、デフォルトの状態だとnullはシリアライズされずフィールドごと無かったことになります。

{

"bar": "baz"
}

↑こうなる


ライブラリみっけた

moshi-lazy-adapters

このライブラリでは、様々なmoshiのアダプターを提供しています。gsonで見たことあるような機能が提供されてます。


導入

compile 'com.serjltt.moshi:moshi-lazy-adapters:2.1'


使用例

今回のようにnullをシリアライズしたい場合は以下のように使います。

data class Hoge(@Serializable val foo: Int? = null,

val bar: String = "baz") : Serializable

val moshi = Moshi.Builder()

.add(SerializeNulls.ADAPTER_FACTORY)
.build()
val hoge = Hoge()
val jsonAdapter = moshi.adapter(Hoge::class.java)
val json = jsonAdapter.toJson(hoge)

{

"foo": null,
"bar": "baz"
}

こうなります。