GSON: @Expose vs @SerializedName
относительно GSON в чем разница между @Expose
и @SerializedName("stringValue")?
4 ответов
@Expose
String myString; // will be serialized as myString
@SerializedName("m_s")
String myString; // will be serialized as m_s
class Person{
String name;
String password;
}
предположим, если я поставлю аннотацию разоблачение поверх имени переменной или пароля без SerializedName, он будет сериализован как переменная name
но если мы ставим SerializedName как ("имя пользователя") или ("пароль"), они будут сериализованы с этим ключом
Если сериализованные
{"username":"trinadh","password":"hello"}
, если не
{"name":"trinadh","password":"hello"}
даже если уже поздно, я хотел ответить на этот вопрос.
Чтобы объяснить это, мы должны знать, что такое serialization
и deserialization
.
serialization
преобразование object
на json string
и deserialization
преобразование json string
на object
.
допустим, мы User
класс без аннотации.
public class User{
private String userName;
private Integer userAge;
public User(String name, Integer age){
userName = name;
userAge = age;
}
}
и serialize
этой object
ниже
User user = new User("Ahmed", 30);
Gson gson = new Gson();
String jsonString = gson.toJson(user);
строка Json будет такой
{
"userName":"Ahmed",
"userAge":30
}
если мы добавим аннотацию @SerializedName
public class User{
@SerializedName("name")
private String userName;
@SerializedName("age")
private Integer userAge;
public User(String name, Integer age){
userName = name;
userAge = age;
}
}
строка Json будет такой
{
"name":"Ahmed",
"age":30
}
@Expose
используется для разрешения или запрещения serialization
и deserialization
.
@Expose
является необязательным и имеет два параметра настройки: serialize
и deserialize
. По умолчанию установлено значение true.
К serialize
и deserialize
С @Expose
мы создаем объект gson, как это
Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
ниже userName
не будет десериализован. значение имени пользователя будет null
.
@SerializedName("name")
@Expose(deserialize = false)
private String userName;
ниже userName
не будет сериализован.
@SerializedName("name")
@Expose(serialize = false)
private String userName;
строка Json будет такой. Только userAge
будет десериализован.
{
"age":30
}
кроме того, @Expose
поставляется с двумя булевыми флагами: deserialize
и serialize
, чтобы пропустить поле для одной фазы.