Java 有一个 transient 关键字,它与默认序列化一起使用,以指示不应序列化的值。但是,如果我将 XML 序列化与 XMLDecoder 一起使用,则与该字段关联的属性仍会被序列化。我用 Gson 库在 JSON 中尝试了同样的方法,并且瞬态字段似乎被正确跳过了。
任何想法为什么?
Java 有一个 transient 关键字,它与默认序列化一起使用,以指示不应序列化的值。但是,如果我将 XML 序列化与 XMLDecoder 一起使用,则与该字段关联的属性仍会被序列化。我用 Gson 库在 JSON 中尝试了同样的方法,并且瞬态字段似乎被正确跳过了。
任何想法为什么?
XML 编码器/解码器支持@XMLTransient
注释。
transient
关键字用于以字节序列结束的 java 对象序列化过程。XML“序列化”最终形成一个格式化的文本文档。当您选择不序列化的字段(通过标记它)时可能会有不同的方面,transient
并且由于输出完全不同,您可能想要选择要排除的不同字段并自己处理它们。例如,在 Java 序列化的情况下,您可能希望选择序列化 a byte[]
,因为它简单明了。在 XML 的情况下,如果它具有更好/更有意义的文本表示,您可能希望序列化用于创建该字节数组的对象。
@XMLTransient
由 使用JAXB
。要XMLEncoder
排除一个字段(将其标记为瞬态),您必须在它们的: ( source )中设置一个"transient"
属性TRUE
PropertyDescriptor
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
.