关于 Gson,@Expose
和 @SerializedName("stringValue")
有什么区别?
最佳答案
即使为时已晚,我也想回答这个问题。
要解释它我们必须知道什么是serialization
和deserialization
。
serialization
正在将 object
转换为 json string
并且 deserialization
正在将 json string
转换为 对象
。
假设我们有一个没有注释的 User
类。
public class User{
private String userName;
private Integer userAge;
public User(String name, Integer age){
userName = name;
userAge = age;
}
}
我们序列化
这个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。
要使用 @Expose
serialize
和 deserialize
我们创建这样的 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
}
https://stackoverflow.com/questions/34752200/