使用 Gson
在Android中 @SerializedName 注释的基本用途是什么?给我一些不同的例子。我无法理解使用它的主要目的。
答案 0 :(得分:205)
Java类示例,
public class Person {
@SerializedName("name")
private String personName;
@SerializedName("bd")
private String birthDate;
}
此课程有两个字段,分别代表一个人的姓名和出生日期。这些字段使用 @SerializedName 注释进行注释。此批注的参数(值)是serialising
和deserialising
对象时使用的名称。例如,Java字段 personName 在JSON中表示为 name 。
JSON示例,
{
"name":"chintan",
"bd":"01-01-1990"
}
答案 1 :(得分:43)
这里的答案已经很少了,但我想补充一点,如果您使用ProGuard
来混淆代码&不要在模型类中使用@SerializedName("name")
,那么你的GSON将无效。因为由于混淆,您的变量名称可能已从String name
更改为String a
,从而导致GSON解析失败,因为GSON会将关键a
查找为json&它会失败。
通过指定@SerializedName
,GSON不会根据变量名称&amp ;;查找json。将只使用指定的@SerializedName
。
当然,您可以告诉proguard不要模糊您的模型,但是如果您希望对模型进行模糊处理,那么您必须指定@SerializedName
答案 2 :(得分:1)
您可以通过在类的顶部指定@Keep来指示Proguard不要混淆您的数据类。这不会删除或混淆您的课程。如果字段名称类似于所使用的Json密钥,则无需为每个字段显式添加@SerializedName。
答案 3 :(得分:1)
实际上,您使用@SerializedName告诉解析器何时从服务器接收到回调,即Json格式的回调:
{
"name":"John Doe",
}
当序列化或反序列化时,一个对象而不是搜索以在Json响应中搜索名为“ userName”的键,搜索“名称”。
@SerializedName("name")
var userName: String,
这很好,因为您可能有一个模型,您希望它可以随心所欲地调用其成员。