相关疑难解决方法(0)

使用Kotlin进行Gson反序列化,不调用初始化程序块

我创建对象时,我的初始化程序块工作正常

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以不同于执行主构造函数的方式创建对象.是否有可能像初始化程序块一样有类似的东西?


gson kotlin

12
推荐指数
1
解决办法
2563
查看次数

在 kotlin 中从 GSON 生成对象时不会调用数据类 init 函数

我正在使用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)

当我配置的从对象Gsonquerysearch值始终nullinit永远不会执行块。我也试过 constructor 没有data关键字,结果是一样的。

kotlin data-class

9
推荐指数
1
解决办法
2445
查看次数

使用Gson从JSON中删除空集合

我想使用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)

javascript java collections json gson

4
推荐指数
1
解决办法
4853
查看次数

标签 统计

gson ×2

kotlin ×2

collections ×1

data-class ×1

java ×1

javascript ×1

json ×1