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

Jackson序列化对象作为地图的键

端木夕
2023-03-14

嗨,我正面临着地图序列化的问题,其中关键是一个自定义类。

data class KeyClass(val id: Int, val name: String) {
    fun toJSON() = "\"KeyClass\": {\"id\":$id,\"name\":\"$name\"}"
}
 fun method(): Map<KeyClass, List<Something>> = ...
class KeyClassSerializer : JsonSerializer<KeyClass>() {
    override fun serialize(value: KeyClass, gen: JsonGenerator, serializers: SerializerProvider) {
        gen.writeRawValue(value.toJSON())
    }

}

class KeyClassSerializerModule : SimpleModule() {
    init {
        addKeySerializer(KeyClass::class.java, KeyClassSerializer())
    }
}
"\"KeyClass\": {\"id\":1,\"name\":\"Thomas\"}" : [Something:...]

共有1个答案

郭兴平
2023-03-14

我假设预期的结果是:

"KeyClass": {
  "id": 1,
  "name":"Thomas"
} : [...]

但它不是有效的JSON。您仍然可以执行以下操作:

{
  "key" : {
      "id": 1,
      "name":"Thomas"
  },
  "value" : [...]
}
 类似资料:
  • 主要内容:1 编写核心类,2 运行测试本文讲解如何将一个Java对象序列化为一个json文件,然后读取该json文件读取回对象。在下面的示例中,我们创建Student类。使用Jackson存储到一个student.json文件,该文件拥有Student对象的JSON表示形式。 1 编写核心类 MainApp: 2 运行测试

  • 我有一个具有两个属性的JSON对象:“key”(字符串)和“value”(可以反序列化为Java bean)。 问题是,给定一个这样的物体列表,我能把它反序列化为一张地图吗? 当前使用Jackson-databind 2.1

  • 我对对象接口的jackson序列化有问题。 我有课 哪个实现 还有上课 哪个实现 上课 我要和Jackson连载Container得到结果 但事实上我得到了结果 尽管我在映射中指定了点的序列化类型(),但在嵌套对象“point”中具有属性“name”。接口点视图没有方法getName,但结果中存在点的字段“name”。 若我从类容器中的方法getMap中删除注释(),我将得到结果 现在点没有属性"

  • 我有一个抽象的超类A,我有几个具体的子类B,C,D 在序列化方面,我执行以下操作: 没问题。我现在想反序列化这个。我知道我不能实例化一个抽象类,那么这是如何实现的呢? 这不起作用: 编辑:我把这个添加到我的抽象超类中:(仍然没有运气) 再次编辑:我现在遇到以下错误: 看看JSON,@class不在那里。我怎样才能做到?我试过: 但这并没有奏效。有这方面的例子吗?如何告诉对象映射器对类使用我的注释?

  • 问题内容: 如何将作为地图的属性序列化为地图的值列表?我已经能够使用吸气剂上的注释进行其他简单的转换。但是,我不确定我想做什么。 问题答案: 我们需要类似的东西,在我们的案例中,我们使用了您所评论的自定义项,这很简单: 使用它的代码:

  • 问题内容: 我有一个包含地图(带有非字符串键)和其他一些字段的类。 我想使用Jackson来对该类进行序列化和反序列化。我看到了另一种方法,因此决定尝试使用杰克逊模块。 我关注了这篇文章,并扩展了JsonDeserializer和JsonSerializer。问题在于这些类应该被键入,因此看起来应该像 KeySerializer也是如此。 然后添加到模块: 但这显然是错误的,因为我遇到了一个例外: