調べたのでメモ。
題名の通り、GsonはオブジェクトをJSONに変換する際、デフォルトではnullのフィールドをシリアライズしない。
nullのフィールドをシリアライズしたい場合、 GsonBuilder#serializeNulls()
を使用する。
サンプルコード
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val data = Data("nonnull", "nullable", null)
val gson1 = Gson()
val json1 = gson1.toJson(data)
Log.d(TAG, json1)
// => {"nonNullProp":"nonnull","nullableProp1":"nullable"}
val gson2 = GsonBuilder().serializeNulls().create()
val json2 = gson2.toJson(data)
Log.d(TAG, json2)
// => {"nonNullProp":"nonnull","nullableProp1":"nullable","nullableProp2":null}
}
data class Data(
val nonNullProp: String,
val nullableProp1: String?,
val nullableProp2: String?
)
companion object {
private const val TAG = "MainActivity"
}
}