要让 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;
}
请注意,它@SerializedName会覆盖任何已定义的策略,因此如果您同时指定@SerializedName和@MyAnnotation,@SerializedName则将使用该值。