Я вижу некоторые побочные эффекты - переходные процессы делают файл полностью не сериализуемым (например, когда в пакете установлено значение argument
, предполагая, что Item
будет Serializable
), не только для GSON.
Итак, одна из возможностей, которую я вижу, это добавить SerializationStrategy для GSON:
import android.arch.persistence.room.PrimaryKey
import com.google.gson.FieldAttributes
import com.google.gson.ExclusionStrategy
import com.google.gson.GsonBuilder
import com.google.gson.Gson
GsonBuilder()
.addSerializationExclusionStrategy(object : ExclusionStrategy {
override fun shouldSkipField(f: FieldAttributes): Boolean {
return f.annotations.any { it is PrimaryKey }
}
override fun shouldSkipClass(aClass: Class<*>): Boolean {
return false
}
}
).create()
Но он не будет сериализовать каждое поле, помеченное @PrimaryClass
. Другой способ будет использовать @Expose
с параметром serialize = false
:
@Expose(serializable = false) @PrimaryKey var id: Int = 0
Тогда поданное будет исключено из сериализации. Вы можете увидеть документы Expose
здесь: https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/annotations/Expose.html