我创建对象时,我的初始化程序块工作正常
class ObjectToDeserialize(var someString: String = "") : Serializable {
init{
someString += " initialized"
}
}
Run Code Online (Sandbox Code Playgroud)
这条路:
@Test
fun createObject_checkIfInitialized() {
assertEquals("someString initialized",ObjectToDeserialize("someString").someString)
}
Run Code Online (Sandbox Code Playgroud)
但是当我用Gson反序列化对象时,初始化块不会被执行:
@Test
fun deserializeObject_checkIfInitialized(){
val someJson: String = "{\"someString\":\"someString\" }"
val jsonObject = Gson().fromJson(someJson, ObjectToDeserialize::class.java)
assertEquals("someString initialized",jsonObject.someString)
// Expected :someString initialized
// Actual :someString
}
Run Code Online (Sandbox Code Playgroud)
我认为gson以不同于执行主构造函数的方式创建对象.是否有可能像初始化程序块一样有类似的东西?
我正在使用Gsson
转换JSON to Kotlin data class
. 在创建数据类对象时,我想解析init
方法中的值。但init
从未调用和生成的对象的值为空。
data class Configuration (val groupId:Int, val key:String, val source:String){
val query:String
val search:String
init {
val obj = JSONObject(key)
query = obj.getString("q")
search = obj.getString("search")
}
}
Run Code Online (Sandbox Code Playgroud)
当我配置的从对象Gson
,query
和search
值始终null
和init
永远不会执行块。我也试过 constructor
没有data
关键字,结果是一样的。
我想使用gson删除具有空集合或空值的属性.
Aiperiodo periodo = periodoService();
//periodo comes from a service method with a lot of values
Gson gson = new Gson();
String json = gson.toJson(periodo);
Run Code Online (Sandbox Code Playgroud)
我打印json,我有这个:
{"idPeriodo":121,"codigo":"2014II",
"activo":false,"tipoPeriodo":1,
"fechaInicioPreMatricula":"may 1, 2014",
"fechaFinPreMatricula":"jul 1, 2014",
"fechaInicioMatricula":"jul 15, 2014",
"fechaFinMatricula":"ago 3, 2014",
"fechaInicioClase":"ago 9, 2014",
"fechaFinClase":"dic 14, 2014",
"fechaActa":"ene 15, 2015",
"fechaUltModificacion":"May 28, 2014 12:28:26 PM",
"usuarioModificacion":1,"aiAvisos":[],
"aiAlumnoCarreraConvalidacionCursos":[],
"aiAlumnoMatriculas":[],"aiMallaCurriculars":[],
"aiAlumnoCarreraEstados":[],"aiAdmisionGrupos":[],
"aiMatriculaCronogramaCabeceras":[],
"aiAlumnoCarreraConvalidacions":[],
"aiHorarioHorases":[],"aiAsistencias":[],
"aiAlumnoPreMatriculas":[],
"aiAlumnoMatriculaCursoNotaDetalles":[],
"aiOfertaAcademicas":[],"aiTarifarios":[]}
Run Code Online (Sandbox Code Playgroud)
例如,对于那个json,我不想拥有集合aiAvisos,有一种方法可以从json中删除它.我正在使用很多集合,我在这里展示了一个,我真的需要从json中删除它们.
我需要这样的东西:
{"idPeriodo":121,"codigo":"2014II",
"activo":false,"tipoPeriodo":1,
"fechaInicioPreMatricula":"may 1, 2014",
"fechaFinPreMatricula":"jul 1, 2014",
"fechaInicioMatricula":"jul 15, 2014",
"fechaFinMatricula":"ago 3, 2014", …
Run Code Online (Sandbox Code Playgroud)