关于Gson,@Expose
和@SerializedName("stringValue")
之间有什么区别?
答案 0 :(得分:64)
@SerializeName
用于设置json对象将包含的键,但是@Expose
用于决定是否将为序列化和反序列化公开变量。 Here's @Expose
的文档。
答案 1 :(得分:43)
即使是很晚,我也想回答这个问题。
为了解释它,我们必须知道什么是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
下面的内容不会反序列化。 userName的值为null
。
@SerializedName("name")
@Expose(deserialize = false)
private String userName;
userName
下面的内容不会被序列化。
@SerializedName("name")
@Expose(serialize = false)
private String userName;
Json字符串将是这样。只有userAge
会反序列化。
{
"age":30
}
答案 2 :(得分:11)
class Person{
String name;
String password;
}
如果我在没有 SerializedName 的情况下将i注释 Expose 放在变量名或密码之上,它将被序列化为AS变量名
但是,如果我们将 SerializedName (“用户名”)或(“密码”)置于其中,则会使用该键序列化< / p>
如果序列化
{"username":"trinadh","password":"hello"}
如果不是
{"name":"trinadh","password":"hello"}
答案 3 :(得分:5)
此外,@Expose
comes with two boolean flags:for annotation in annotationsToRemove {
let pinView = mapView.view(for: annotation)
UIView.animate(withDuration: 2, delay: 0, options: UIViewAnimationOptions.curveEaseOut, animations: {
pinView?.alpha = 0.0
}, completion: { (finished: Bool) -> Void in
self.mapView.removeAnnotation(annotation)
})
}
}
和deserialize
允许跳过一个阶段的字段。