Je dois sérialiser les classes Java sans modifier leur code source. J'utilise GSON et j'obtiens "la classe Person déclare plusieurs champs JSON nommés serialVersionUID", car la superclasse de Person a aussi ce champ. Donc, je veux exclure les champs nommés serialVersionUID pendant la sérialisation pour éviter cette erreur (il est ok pour mes besoins) en ajoutant le code ci-dessous:Pourquoi la stratégie d'exclusion par nom n'empêche pas l'erreur "classe déclare plusieurs champs JSON nommés XXX"?
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();
}
Cependant, je reçois toujours l'erreur et ne peut pas comprendre la raison au-delà.
Voici la hiérarchie de classe par exemple:
public class Person extends SuperPerson {
private static final long serialVersionUID = 1L;
}
public class SuperPerson {
private static final long serialVersionUID = 1L;
}
Est-ce le Le champ 'serialVersionUID' pour satisfaire' Serializable'? Ce champ doit être 'static' et Gson ne gère pas les champs' static'. Veuillez montrer votre hiérarchie de classe (les parties nécessaires pour reproduire cette erreur). –
Je dois également sérialiser les champs statiques, donc j'ajoute gsonBuilder.excludeFieldsWithModifiers (java.lang.reflect.Modifier.TRANSIENT) ;. Les questions sont mises à jour. – Guneli