在进行名称更改,排除等压缩时需要将java对象序列化为JSON。对象使用jar中的类,源代码不可用。
浏览了许多库(Jackson,Gson),但没有找到解决这个特定问题的方法。它们中的大多数都是基于注释的,因为我没有源代码,所以我不能使用它们。
解决此问题的一种方法是,使用反射并递归遍历对象,直到找到应替换的属性名称或在序列化 JSON 中排除对象。
需要解决这个问题。如果它已经实施和测试,那就更好了。
您还可以查看 Genson 库http://code.google.com/p/genson/。
您可以使用非常简洁的代码重命名和过滤:
// renames all "fieldOfName" to "toName", excludes from serialization
// and deserialization fields named "fieldNamed" and declared in DefinedInClass
// and uses fields with all visibility (protected, private, etc)
Genson genson = new Genson.Builder().rename("fieldOfName", "toName")
.exclude("fieldNamed", DefinedInClass.class)
.setFieldFilter(VisibilityFilter.ALL)
.create();
genson.serialize(myObject);
如果您想做一些更复杂的过滤(例如基于注释),您可以实现BeanMutatorAccessorResolver或扩展BaseResolver。
对于属性重命名,您可以实现PropertyNameResolver并拥有完全控制权。
最后,如果您想根据修饰符过滤字段、方法或构造函数,您可以定义自己的VisiblityFilter。
关于过滤/重命名的性能应该没有问题,因为每个类只执行一次然后缓存。
要开始使用 Genson,您可以查看入门指南。
找到了问题的解决方案。
Google gson 有一个名为GsonBuilder的类,它具有排除策略和命名策略的方法。
使用这两种方法实现了一个自定义解决方案,其中所有映射和排除规则都使用 xml 存储并在序列化和反序列化时使用。
完美运行,但不确定相同的性能。