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



json (3)

Java类示例

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}

此类具有两个字段,分别代表一个人的姓名和出生日期。 这些字段使用 @SerializedName 注释进行注释。 此注释的参数(值)是在 serialisingdeserialising 对象时要使用的名称。 例如,Java字段 personName 在JSON中表示为 名称

JSON示例,

{
    "name":"chintan",
    "bd":"01-01-1990"
}

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

给我一些不同的例子。 我不明白使用它的主要目的。


Answer #1

此处的答案已经很少了,但是我想补充一点,如果您使用 ProGuard 混淆代码 @SerializedName("name") 在模型类中不使用 @SerializedName("name") ,那么您的GSON将无法正常工作。 因为由于混淆,您的变量名可能已从 String name 更改为 String a 导致GSON解析失败,因为GSON将在json中查找密钥 a 并将失败。

通过指定 @SerializedName ,GSON将不会基于变量名查找json,而只会使用指定的 @SerializedName

当然,您可以告诉proguard不要混淆您的模型,但是如果您希望混淆模型,则必须指定 @SerializedName


Answer #2

您可以通过在类的顶部指定@Keep来指示Proguard不要混淆您的数据类。 这不会删除或混淆您的课程。 如果字段名称类似于所使用的Json密钥,则无需为每个字段显式添加@SerializedName。





gson