Chi*_*hod 234
Java类示例,
public class Person {
@SerializedName("name")
private String personName;
@SerializedName("bd")
private String birthDate;
}
Run Code Online (Sandbox Code Playgroud)
此类有两个字段,表示人员的姓名和出生日期.这些字段使用@SerializedName注释进行注释.此批注的参数(值)是在对象serialising
和deserialising
对象时使用的名称.例如,Java字段personName在JSON中表示为名称.
JSON示例,
{
"name":"chintan",
"bd":"01-01-1990"
}
Run Code Online (Sandbox Code Playgroud)
San*_*iya 53
这里的答案已经很少了,但我想补充一点,如果您使用的ProGuard
是模糊代码并且不在@SerializedName("name")
模型类中使用,那么您的GSON将无法正常工作.因为混淆,你的变量名可能已经改变String name
为String a
导致破坏的GSON解析,因为GSON将寻找密钥a
到json并且它将失败.
通过指定@SerializedName
,GSON将不会基于变量名称查找json并且将仅使用指定的@SerializedName
.
当然你可以告诉proguard不要模糊你的模型,但如果你想模型混淆,那么你必须指定 @SerializedName
小智 5
您可以通过在类顶部指定 @Keep 来指示 Proguard 不要混淆您的数据类。这既不会删除也不会混淆你的类。如果字段名称与所使用的 Json 键类似,则无需显式向每个字段添加 @SerializedName。
使用 @SerializedName 您实际上是在从服务器接收回调时告诉解析器,即 Json 格式:
{
"name":"John Doe",
}
Run Code Online (Sandbox Code Playgroud)
当序列化或反序列化对象时,而不是搜索名为“userName”的键,在 Json 响应中搜索“name”。
@SerializedName("name")
var userName: String,
Run Code Online (Sandbox Code Playgroud)
这很好,因为您可能有一个模型,您希望它的成员可以随心所欲地被调用。