Gson如何获取序列化名称

laa*_*ptu 14 java gson

当我们定义具有以下格式的类时

public class Field {
    @SerializedName("name")
    public String name;
    @SerializedName("category")
    public String category;

}
Run Code Online (Sandbox Code Playgroud)

对于JsonObject内容

{
    "name" : "string",
    "category" : "string",
}
Run Code Online (Sandbox Code Playgroud)

Gson用于解析内容

Field field = new GsonBuilder().create().fromJson(
                content, Field.class);
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是我们可以用它Gson来获得@Serialized名称.在这种情况下,我想知道什么@Serialized名称用于field.name,这是namefield.categorycategory.

根据@Sotirios Delimanolis的建议,使用Reflection我们可以得到这个Serialized名字

java.lang.reflect.Field fields = Field.class.getDeclaredField("name");             
SerializedName sName =fields.getAnnotation(SerializedName.class);            
System.out.println(sName.value()); 
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 14

使用反射来检索所需的Field对象.然后,您可以使用Field#getAnnotation(Class) 获取SerializedName可以调用的实例value()来获取名称.

  • `java.lang.reflect.Field fields = Field.class.getDeclaredField("name"); SerializedName sName = fields.getAnnotation(SerializedName.class); System.out.println(sName.value());`谢谢你.但是没有任何其他方法可以在没有"反射"的情况下实现,因为我听说`反射'是CPU密集型的.而我正在为'Android`开发这个 (3认同)