Gson 如何获取序列化名称

2022-09-02 21:57:40

当我们使用以下格式定义类时

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

}

对于内容JsonObject

{
    "name" : "string",
    "category" : "string",
}

和 用于解析内容Gson

Field field = new GsonBuilder().create().fromJson(
                content, Field.class);

所以,我的问题是我们能不能用这个名字来取名。因为在这个例子中,我想知道什么名称用于,哪个是,哪个是。Gson@Serialized@Serializedfield.namenamefield.categorycategory

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

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

答案 1

使用反射来检索所需的对象。然后,您可以使用 Field#getAnnotation(Class) 来获取一个实例,您可以在该实例上调用该实例来获取名称。FieldSerializedNamevalue()


答案 2

与其解析 ,难道不能将其解析为 a 吗?然后使用:Field.classJsonObject.classJsonObject.get()

import com.google.gson.JsonObject;

Gson gson = new GsonBuilder().create();
JsonObject jsonObject = gson.fromJson(content, JsonObject.class);
String serializedName = jsonObject.get("name").getAsString();

请注意,.getAsString() 会将其作为不带内嵌双引号的字符串返回,请将其与调用 时进行比较。toString()


我试图做的一件事是序列化枚举字段,它不是一个对象。在这种情况下,您可以使用 序列化,因为它只是一个基元:JsonElement.class

import com.google.gson.JsonElement;

Gson gson = new GsonBuilder().create();
JsonElement jsonElement = gson.fromJson("\"a\"", JsonElement.class);
String serializedName = jsonElement.getAsString();

推荐