基本上,我有一些Java对象,我希望尽可能少地将它们序列化为JSON。现在我用的是Tomcat,Jersey和Genson。
我发现这样的东西在Genson中不起作用(当然,这是一个玩具示例):
public class Main {
public static void main(String[] args) {
MyClass mc = new MyClass();
mc.mapOfSets = new HashMap<>();
Set<String> set0 = new HashSet<>();
set0.add("0");
Set<String> set1 = new HashSet<>();
set1.add("1");
set1.add("11");
Set<String> set2 = new HashSet<>();
set2.add("2");
set2.add("22");
set2.add("222");
mc.mapOfSets.put("set0", set0);
mc.mapOfSets.put("set1", set1);
mc.mapOfSets.put("set2", set2);
try {
String json1 = new Genson().serialize(mc.mapOfSets);
System.out.println(json1);
String json = new Genson().serialize(mc);
System.out.println(json);
} catch (TransformationException | IOException e) {
e.printStackTrace();
}
}
}
class MyClass {
public Map<String, Set<String>> mapOfSets;
}以上代码的输出如下:
{"set1":["1","11"],"set0":["0"],"set2":["2","222","22"]}
{"mapOfSets":{"empty":false}}Genson的好处是我只是把它放到了我的WebContent文件夹中,然后它就被用来代替与Jersey捆绑在一起的东西--不需要额外的配置。如果有一种非常简单的方法可以让像上面这样的对象序列化到JSON,而不必为每个模式编写某种类型的转换器,我很乐意使用Jersey而不是Genson,但是Genson到目前为止还没有让我失望。
那么--我如何利用Genson来正确地进行序列化--或者什么是能够轻松处理这类事情的库呢?
谢谢!
发布于 2013-02-05 09:41:31
我使用Guice来处理我的依赖注入需求,这就是为什么我很难让Jackson与我的Jersey项目集成在一起。由于Genson没有做我想要的事情,我决定再次尝试Jackson。我试着改变一些东西,直到它起作用了,在SO和Google上尝试了不同的建议。
现在,下面的代码给出了我的Sandbox项目中预期的输出:
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
String jsonData = mapper.writeValueAsString(mc);
System.out.println(jsonData);{"mapOfSets":{"set1":["1","11"],"set0":["0"],"set2":["2","222","22"]}}发布于 2013-02-05 16:53:36
我是Gensons的作者。我刚刚检查了一下,这是一个bug,泛型在Genson中工作得很好,除了这个特殊的情况...如果你可以等到明天,我会在今晚推出一个新的版本,其中包含修复和一些次要的新功能。完成后,我会更新我的答案。
编辑错误更正和版本0.94推向公共maven存储库,它应该在几个小时内最多可用。以下是一些changes in this release。请尝试并确认它是否解决了您的问题。谢谢:)
https://stackoverflow.com/questions/14698055
复制相似问题