关于java:为什么XMLDecoder不尊重transient关键字?

Why doesn't XMLDecoder respect the transient keyword?

Java有一个用于默认序列化的瞬态关键字,以指示不应该序列化的值。但是,如果将XML序列化与XML解码器一起使用,则与该字段关联的属性仍然是序列化的。我在JSON中对GSON库进行了同样的尝试,并且临时字段似乎被正确地跳过了。

你知道为什么吗?


XML编码器/解码器支持@XMLTransient注释。

EDCOX1的1个关键字是用于Java对象序列化过程,其结束在字节序列中。XML"序列化"以格式化的文本文档结尾。当您选择一个字段不进行序列化(通过将其标记为transient)时,可能会有不同的方面,而且由于输出非常不同,所以您可能希望选择要排除并自己处理的不同字段。例如,在Java序列化的情况下,您可能希望选择序列化EDCOX1 3Ω,因为这是简单明了的。对于XML,如果对象具有更好/更有意义的文本表示形式,则可能希望序列化用于创建该字节数组的对象。

@XMLTransientJAXB使用。为了使XMLEncoder排除一个字段(将其标记为瞬态),必须在其PropertyDescriptor中将"transient"属性设置为TRUE(源)

1
2
3
4
5
6
7
8
9
BeanInfo info = Introspector.getBeanInfo(JTextField.class);
PropertyDescriptor[] propertyDescriptors =
                             info.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; ++i) {
    PropertyDescriptor pd = propertyDescriptors[i];
    if (pd.getName().equals("text")) {
        pd.setValue("transient", Boolean.TRUE);
    }
}

这不是一个优雅的解决方案。另一种选择是使用JAXB而不是XMLEncoder