0

我有以下使用 JSON 处理 API 的代码(描述符是我要序列化的接口)。

  public void serialize(ComponentDescriptor descriptor, JsonGenerator generator, SerializationContext ctx) {
    generator.writeStartObject();
    generator.writeStartObject(descriptor.getClass().getName());
    generator.write("name", descriptor.getName());
    ctx.serialize("settings", descriptor.getSettings(), generator);
    generator.writeEnd();
    generator.writeEnd();
  }

这适用于 Yasson,但如果我尝试用 Johnzon 序列化同一个对象,我会得到:

javax.json.stream.JsonGenerationException: state START_OBJECT does not accept a value

两种实现之间显然存在差异(我猜不应该存在),但是编写对象的正确方法是什么(理想情况下它适用于两者)?

我期待的输出是:

{
  "my.package.TestDescriptor": {
    "name": "Test",
    "settings": {
      "host": "localhost",
      "port":8080
    }
  }
}
4

1 回答 1

0

代码看起来不错也许可以尝试一下今天发布并符合 JSON-B 测试的 johnzon 1.2.1。如果它确实有效,那么解决方法就是序列化地图而不是手动使用生成器,这不性感但便携。

于 2019-10-03T20:11:01.913 回答