如何替换序列化名称

问题描述 投票:0回答:1

假设我想要的JSON为{"grrrr":"zzzzz"}

class MyClass{
    @SerializedName("grrrr")
    private String myString;
}

上面的类很好。

但是:

class MyClass{
    @MyAnnotation("grrrr")
    private String myString;
}

这将产生{"myString":"zzzzz"}

如何使Gson识别MyAnnotation#value()并处理为SerializedName#value()

java gson
1个回答
0
投票

[要使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;
}
© www.soinside.com 2019 - 2024. All rights reserved.