在选定执行时跳过父类中的 gson 字段



在这种情况下,我有两个具有GSON实现的类,一个是A,另一个是B,

Class A {
@SerializedName("x")
@Expose
private String x;
@SerializedName("y")
@Expose
private String y;
...
} 
class B extends A{
@SerializedName("x")
@Expose
private List<String> x;
@SerializedName("z")
@Expose
private String z;
...
}

问题是两个类都需要在那里有序列化名称 x 字段,并且不能对类 A 进行任何更改,因为它被其他一些类使用,因此当类 B 序列化时,由于一个序列化名称中的多个变量,它会给出和错误。对此的最佳解决方案是什么?根据我的理解,GSON 排除策略将无法正常工作,因为它将始终跳过父 x。

序列化B时需要使用ExclusionStrategy,但在序列化A时不需要。所以只需制作 2 个Gson对象。

排除策略

这将在使用时忽略A.x

class MyExclusionStrategy implements ExclusionStrategy {
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
public boolean shouldSkipField(FieldAttributes field) {
return field.getDeclaringClass().equals(A.class) && 
field.getName().equals("x");
}
}

给定以下 2 个对象:

A a = new A();
a.setX("xValue");
a.setY("yValue");

B b = new B();
b.setX(Arrays.asList("a", "b"));
b.setY("yValue");
b.setZ("zValue");

序列化a

Gson gson = new GsonBuilder().create();
String aAsJsonString = gson.toJson(a);
System.out.println(aAsJsonString);

输出:

{"x":"xValue","y":"yValue"}

序列化b

Gson gson = new GsonBuilder()
.setExclusionStrategies(new MyExclusionStrategy())
.create();
String bAsJsonString = gson.toJson(b);
System.out.println(bAsJsonString);

输出:

{"x":["a","b"],"z":"zValue","y":"yValue"}

最新更新