使用 Jackson (JSON) 进行序列化 - 得到“未找到序列化程序”?

新手上路,请多包涵

尝试使用 Jackson 序列化一个非常简单的对象时出现异常。错误:

org.codehaus.jackson.map.JsonMappingException:没有找到类 MyPackage.TestA 的序列化程序,也没有发现创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)

下面是要序列化的简单类和代码。

谁能告诉我为什么我会收到这个错误?

 public class TestA {
    String SomeString = "asd";
}

TestA testA = new TestA();
ObjectMapper om = new ObjectMapper();
try {
    String testAString = om.writeValueAsString(testA); // error here!

    TestA newTestA = om.readValue(testAString, TestA.class);
} catch (JsonGenerationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (JsonMappingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

原文由 Ted 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 958
2 个回答

如前所述, ObjectMapper 实例的默认配置是仅访问公共字段或具有公共 getter/setter 的属性。更改类定义以使字段公开或提供公共 getter/setter 的替代方法是指定(对基础 VisibilityChecker )不同的属性可见性规则。 Jackson 1.9 提供了 ObjectMapper.setVisibility() 方便的方法。对于原始问题中的示例,我可能会将其配置为

myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);

对于杰克逊 >2.0:

 myObjectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

有关相关配置选项的更多信息和详细信息,我建议查看 ObjectMapper.setVisibility() 上的 JavaDocs

原文由 Programmer Bruce 发布,翻译遵循 CC BY-SA 4.0 许可协议

添加一个

吸气剂

和一个

二传手

问题就解决了。

原文由 Günay Gültekin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题