我有一堂课说人。当我使用 gson 将其转换为 json 时,有时我想包含 field name,但有时我不想包含它。我可以将gson中的任何api用于这种目的吗?
class Person {
int id;
String name;
}
一种方法是使用ExclusionStrategyin Gson。它允许我们定义一个策略来判断GsonBuilder是否使用自定义标准序列化类或字段。
代码片段
我使用一个变量isNameIgnored来启用/禁用name要动态序列化的字段。
boolean isNameIgnored = false;
ExclusionStrategy strategy = new ExclusionStrategy() {
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
@Override
public boolean shouldSkipField(FieldAttributes field) {
return isNameIgnored ? "name".equals(field.getName()) : false;
}
};
然后您可以将策略GsonBuilder应用于序列化,如下所示:
Gson gson = new GsonBuilder()
.addSerializationExclusionStrategy(strategy)
.create();
接受的答案是正确的,也是最灵活的方法。
但是,根据具体情况,@Version如果实际上是关于版本化不同案例的问题,有时您可以从注释中受益。所以你可以做的是制作你的类的版本,比如:
@Getter @Setter
public class User {
@Since(1.0)
private int id;
@Since(1.1)
private String name;
}
然后用于GsonBuilder决定要处理的版本,例如:
Gson gson10 = getGsonBuilder().setVersion(1.0).create();
Gson gson11 = getGsonBuilder().setVersion(1.1).create();
还
看gson的api,我们可以使用方法' toJson(java.lang.Object src, java.lang.Appendable writer)'来具体的泛化类型src。enable/disable那么,我们可以对字段使用不同的类型吗?