0
我必須序列化Java類而不修改它們的源代碼。我正在使用GSON並獲得「類Person聲明多個名爲serialVersionUID的JSON字段」,因爲Person的超類也具有此字段。所以我想序列化,以避免這個錯誤時,排除命名的serialVersionUID領域(這是確定我的目的)添加以下代碼:爲什麼按名稱排除策略不會阻止「類聲明多個名爲XXX的JSON字段」錯誤?
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;
}
是的用於滿足'Serializable'的'serialVersionUID'字段?該字段應該是「靜態」的,而Gson不處理「靜態」字段。請顯示您的類層次結構(重現此錯誤的必要部分)。 –
我必須序列化靜態字段,所以我添加gsonBuilder.excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT);.問題已更新。 – Guneli