Groovy-使用元类删除类字段临时修饰符

Groovy-使用元类删除类字段临时修饰符,groovy,metaprogramming,Groovy,Metaprogramming,我们有一个简单的Groovy类: class A implements Serializable { transient Integer t // this field is transient in the serialization process Object o } 正如我们所知,我们可以使用Groovy的元类属性(元编程)在运行时修改类的属性和方法 我不想做的是:从类的“t”属性中删除“transient”修饰符,并让它序列化该字段。我需要在运行时使用元类或其他机制来完成

我们有一个简单的Groovy类:

class A implements Serializable {
   transient Integer t // this field is transient in the serialization process
   Object o
}
正如我们所知,我们可以使用Groovy的元类属性(元编程)在运行时修改类的属性和方法

我不想做的是:从类的“t”属性中删除“transient”修饰符,并让它序列化该字段。我需要在运行时使用元类或其他机制来完成这项工作


重新编译、重新创建类不是解决方案。我已经在服务器上部署并运行了这个类,我能做的唯一一件事就是通过远程groovy shell更改它的元行为。

我已经尝试过了,我认为这是不可能的

即使使用反射并在类中声明的字段上设置修饰符,序列化仍然会跳过该属性

我认为唯一的解决方案是编写自己的序列化例程,忽略瞬态修饰符


当然,也可以更改类(但您说这是不可能的)

如果您想控制瞬态字段的序列化,请使用json io()Java/Groovy序列化库。它允许您关联一个类,该类将告诉序列化程序要序列化哪些字段。此列表被指定为字符串列表。换言之,您可以有效地告诉序列化程序要逐个类序列化哪些字段。因此,如果只有一个类导致问题,请指定要序列化的字段,包括临时字段,然后它们将被序列化

def custom = [(A.class):['t', 'o']]
def args = [(JsonWriter.FIELD_SPECIFIERS):custom]
def json = JsonWriter.objectToJson(root, args)
println json
如果有多个类具有要序列化的临时字段:

def custom = [(A.class):['t', 'o'], (B.class):['field1','field2'], ...]
def args = [(JsonWriter.FIELD_SPECIFIERS):custom]
def json = JsonWriter.objectToJson(root, args)
println json
(A.class)在括号中,因为Groovy映射中的键如果不是字符串,则需要在括号中