假设我想要的JSON为{"grrrr":"zzzzz"}
class MyClass{
@SerializedName("grrrr")
private String myString;
}
上面的类很好。
但是:
class MyClass{
@MyAnnotation("grrrr")
private String myString;
}
这将产生{"myString":"zzzzz"}
如何使Gson识别MyAnnotation#value()
并处理为SerializedName#value()
?
[要使Gson识别自制注释,请实施自定义FieldNamingStrategy
。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface MyAnnotation {
String value();
}
class MyNamingStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field f) {
MyAnnotation annotation = f.getAnnotation(MyAnnotation.class);
if (annotation != null)
return annotation.value();
// Use a built-in policy when annotation is missing, e.g.
return FieldNamingPolicy.IDENTITY.translateName(f);
}
}
然后在创建Gson
对象时指定它。
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(new MyNamingStrategy())
.create();
并像在问题中一样使用它。
class MyClass{
@MyAnnotation("grrrr")
private String myString;
}