使用Gson在Android中@SerializedName注释的基本目的是什么?

时间:2015-03-10 06:18:33

标签: java android json gson

使用 Gson

在Android中 @SerializedName 注释的基本用途是什么?

给我一​​些不同的例子。我无法理解使用它的主要目的。

4 个答案:

答案 0 :(得分:205)

Java类示例,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

此课程有两个字段,分别代表一个人的姓名和出生日期。这些字段使用 @SerializedName 注释进行注释。此批注的参数(值)是serialisingdeserialising对象时使用的名称。例如,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,

这很好,因为您可能有一个模型,您希望它可以随心所欲地调用其成员。