Java 如何使gson排除我的对象';什么是超类?
我正在尝试使用Gson进行序列化/反序列化。我不想考虑超类(它是抽象的),问题是我没有访问超类代码的权限 我尝试了一个Java 如何使gson排除我的对象';什么是超类?,java,gson,Java,Gson,我正在尝试使用Gson进行序列化/反序列化。我不想考虑超类(它是抽象的),问题是我没有访问超类代码的权限 我尝试了一个排除策略,但没有成功 private class SuperClassExclusionStrategy implements ExclusionStrategy { @Override public boolean shouldSkipClass(Class<?> clazz) { return clazz.
排除策略
,但没有成功
private class SuperClassExclusionStrategy implements ExclusionStrategy {
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return clazz.equals(SuperClass.class);
}
@Override
public boolean shouldSkipField(FieldAttributes field) {
return false;
}
}
从
基于特定类类型排除字段和对象:
私有静态类SpecificClassExclutionStrategy实现了ExclutionStrategy{
私人最终课程不包括该课程;
公共特定类排除策略(类排除此类){
this.excludedThisClass=excludedThisClass;
}
公共布尔shouldSkipClass(类clazz){
返回排除该类。等于(clazz);
}
公共布尔值shouldSkipField(字段属性f){
返回excludedThisClass.equals(f.getDeclaringClass());
}
}
getDeclaringClass
该作业不执行getDeclaredClass
@RenéLink否,OP希望排除特定类的所有字段,而不是某些类型的字段。也就是说(例如class Clazz{String f;}),如果要排除class Clazz的所有字段,那么我们应该使用“f.getDeclaringClass()==Clazz.class”,而不是“f.getDeclaredClass()==String.class”。假设有一个超类哺乳动物
和一个子类人类
。每当哺乳动物
被直接传递给GSON时,我希望它被序列化。但是,每当GSON遇到Human
对象时,我只希望GSON序列化Human
特定的字段,而不是从哺乳动物
继承的字段。排除策略能否处理此问题?
private static class SuperClassExclusionStrategy implements ExclusionStrategy {
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
public boolean shouldSkipField(FieldAttributes field) {
return field.getDeclaringClass().equals(MySuperClass.class) && field.getName()
.equals("id");
}
}
private static class SpecificClassExclusionStrategy implements ExclusionStrategy {
private final Class<?> excludedThisClass;
public SpecificClassExclusionStrategy(Class<?> excludedThisClass) {
this.excludedThisClass = excludedThisClass;
}
public boolean shouldSkipClass(Class<?> clazz) {
return excludedThisClass.equals(clazz);
}
public boolean shouldSkipField(FieldAttributes f) {
return excludedThisClass.equals(f.getDeclaringClass()());
}
}