方案
1、通过GSON提供的策略接口,忽略子类在父类中存在的字段,缺点是会导致该属性无法被序列化。
public class SuperclassExclusionStrategy implements ExclusionStrategy {
public boolean shouldSkipClass(Class<?> arg0) {
return false;
}
public boolean shouldSkipField(FieldAttributes fieldAttributes) {
String fieldName = fieldAttributes.getName();
Class<?> theClass = fieldAttributes.getDeclaringClass();
return isFieldInSuperclass(theClass, fieldName);
}
private boolean isFieldInSuperclass(Class<?> subclass, String fieldName) {
Class<?> superclass = subclass.getSuperclass();
Field field;
while (superclass != null) {
field = getField(superclass, fieldName);
if (field != null) {
return true;
}
superclass = superclass.getSuperclass();
}
return false;
}
private Field getField(Class<?> theClass, String fieldName) {
try {
return theClass.getDeclaredField(fieldName);
} catch (Exception e) {
return null;
}
}
}
public Gson gson = new GsonBuilder()
.addDeserializationExclusionStrategy(new SuperclassExclusionStrategy())
.addSerializationExclusionStrategy(new SuperclassExclusionStrategy())
.create();
2、直接使用fastjson