java - 在没有源代码的情况下序列化为 JSON 时更改属性名称

标签 java json serialization

需要将java对象序列化为JSON,同时进行压缩,例如名称更改、排除等。对象使用jar中的类,其源代码不可用。

查看了许多库( JacksonGson ),但没有发现可以解决这个特定问题的库。其中大多数都是基于注释的,因为我没有源代码,所以我无法使用它们。

解决此问题的一种方法是,使用反射并递归地遍历对象,直到找到应替换的属性名称或在序列化 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,您可以查看 Getting Started Guide .

关于java - 在没有源代码的情况下序列化为 JSON 时更改属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12619991/

相关文章:

java - 使用 LookAndFeel 进行 JFrame 序列化

java - 在 Java 中使用重复来命名对象

ios - 解析 JSON Swift 下标错误

c# - 更多 json c# 问题

javascript - 使用 PHP 和 JSON 平面文件的最佳实践/方法

java - 重新初始化 transient 变量的正确方法

serialization - Golang 映射/数组(非结构)序列化

java - java中访问资源的不同字符串

java - Libgdx 创建图像缩略图

java - onCreate 方法错误(FragmentActivity)