Java 在序列化为JSON而不使用源代码时更改属性名称

Java 在序列化为JSON而不使用源代码时更改属性名称,java,json,serialization,Java,Json,Serialization,在进行压缩(如名称更改、排除等)时,需要将java对象序列化为JSON。对象使用jar中的类,其源代码不可用 查看了许多库(,),但没有找到解决此特定问题的库。其中大多数都是基于注释的,因为我没有源代码,所以不能使用 解决这个问题的一种方法是,使用反射并递归地遍历对象,直到找到一个属性名,该属性名应该被替换,或者序列化JSON中的对象被排除 我们需要解决这个问题。如果已经实现并测试过,效果会更好。找到了问题的解决方案 GoogleGSON有一个名为的类,该类有和的方法 使用这两个方法实现了一个自

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

查看了许多库(,),但没有找到解决此特定问题的库。其中大多数都是基于注释的,因为我没有源代码,所以不能使用

解决这个问题的一种方法是,使用反射并递归地遍历对象,直到找到一个属性名,该属性名应该被替换,或者序列化JSON中的对象被排除


我们需要解决这个问题。如果已经实现并测试过,效果会更好。

找到了问题的解决方案

GoogleGSON有一个名为的类,该类有和的方法

使用这两个方法实现了一个自定义解决方案,其中所有映射和排除规则都使用xml存储,并在序列化和反序列化时使用


虽然不能确定它的性能,但工作非常完美。

您也可以查看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);
  • 如果您想做一些更复杂的过滤(例如基于注释),您可以实现或扩展

  • 相同的属性重命名,您可以实现并拥有完全控制权

  • 最后,如果您想根据字段、方法或构造函数的修饰符过滤它们,您可以定义自己的修饰符

  • 关于过滤/重命名的性能,应该没有问题,因为每个类只执行一次,然后缓存


要开始使用Genson,您可以看看。

您可以为这些对象编写包装类。所谓包装类,您的意思是复制我的类中的每个属性,然后向它们添加注释吗?是的。如果课程太多,可能不实用。检查是否合适。谢谢你的回答,我会看一看,但是我使用这个的机会很小…虽然这对其他人有帮助。。。。