【发布时间】:2017-10-12 15:36:33
【问题描述】:
我必须在不修改源代码的情况下序列化 Java 类。我正在使用 GSON 并获取“类 Person 声明了多个名为 serialVersionUID 的 JSON 字段”,因为 Person 的超类也有这个字段。所以我想在序列化过程中排除名为 serialVersionUID 的字段以避免这个错误(这对我来说是可以的)添加下面的代码:
GsonBuilder gsonBuilder = new GsonBuilder();
ExclusionStrategy excludePolicy = new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes arg0) {
return arg0.getName().contains("serialVersionUID");
}
@Override
public boolean shouldSkipClass(Class<?> arg0) {
return false;
}
};
gsonBuilder.addSerializationExclusionStrategy(excludePolicy);
gsonBuilder.excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT);
Gson gson = gsonBuilder.create();
Writer writer;
try {
writer = new FileWriter("fileLoc");
gson.toJson(personList, writer);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
但是,我仍然收到错误,无法理解除此之外的原因。
这是示例类层次结构:
public class Person extends SuperPerson {
private static final long serialVersionUID = 1L;
}
public class SuperPerson {
private static final long serialVersionUID = 1L;
}
【问题讨论】:
-
serialVersionUID字段是否满足Serializable?该字段应该是static并且 Gson 不处理static字段。请显示您的类层次结构(重现此错误的必要部分)。 -
我还必须序列化静态字段,所以我添加了 gsonBuilder.excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT);。问题已更新。