当前位置: 首页 > 知识库问答 >
问题:

Moshi未能将0,1反序列化为“Boolean?”

松英叡
2023-03-14
@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class BooleanType

class BooleanAdapter {
    @FromJson
    @BooleanType
    fun fromJson(value: Int): Boolean {
        return value == 1
    }

    @ToJson
    fun toJson(@BooleanType value: Boolean): Int {
        return if (value) 1 else 0
    }
}
No JsonAdapter for class java.lang.Boolean annotated [@com.pk.data.serialize.BooleanType()]
....

下面是虚拟数据和单元测试

@JsonClass(generateAdapter = true)
data class HaHaData(
    @BooleanType
    @Json(name = "haha") val haha: Boolean?,
)


 @Test
    fun parseNullBooleanTest() {
        val moshi = Moshi.Builder()
            .add(BooleanAdapter())
            .build()
        val json = "{\"haha\":1}"
        val jsonWithNull = "{\"haha\":null}"
        val data = HaHaDataJsonAdapter(moshi).fromJson(json)
        val dataWithNull = HaHaDataJsonAdapter(moshi).fromJson(jsonWithNull) // exception thrown
        assert(data?.haha== true)
        assert(dataWithNull?.haha == null)
    }

共有1个答案

常子濯
2023-03-14

您的fromjson不接受null作为输入。

如果希望null变为false:

fun fromJson(value: Int?): Boolean {
      return 
}

如果您希望null保持null(您还必须修改tojsonfun来接受null):

fun fromJson(value: Int?): Boolean? {
    return value?.let { it == 1 }
}
 类似资料:
  • 添加到DTO对象后,我想向服务器发送一个列表 从…起 当向控制器发送对象时,它会抛出

  • 我有一个JSON字符串,它将空列表标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到这样的字符串: 我想将其反序列化为父类,将子类正确设置为子类的空列表。 对于上面的JSON字符串,我想要一个将其id设置为13的对象,并将子元素设置为新的ArrayList 我知道如何为整个类使用注释 然后呢 但是,我想解决从字符串正确实例化列表的一般问题: 我能得到这样的东西吗?

  • 我正在Android上使用Moshi 1.8.0,并按照Moshi文档中的说明创建自定义字段:https://github.com/square/Moshi#custom-field-names-with-json 这意味着我的请求数据类是这样的: 但问题是实际的HTTP请求是这样发送的: 我所期待的是我的请求是这样的: 这似乎对响应工作得很好,但我不知道如何使它对请求工作。 谢谢!这难道不是注释

  • 以下内容将生成一个IllegalArgumentException,因为您“无法序列化抽象类” 我尝试过使用自定义适配器来解决这个问题,但我能找到的唯一解决方案是显式地为每个子类编写所有的属性名。例如: 最终,我希望生成如下所示的JSON: 我很乐意使用自定义适配器来编写每个类型的名称,但我需要一个解决方案,它将自动序列化每个类型的属性,而不是手动编写它们。

  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 我正在使用gson进行改造,将json反序列化为领域对象。这在大多数情况下都很有效。处理问题时会出现麻烦 RealmList(字符串(或任何其他基本数据类型)) 由于Realm不支持RealmList,其中E不扩展Realm对象,所以我将字符串包装在RealmObject中。 我的领域对象如下 SimpleRealmObj工作正常,因为它只有字符串元素 如何反序列化stringStuff?我试过使