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


110

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

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


javadoc说什么?
Sotirios Delimanolis 2015年

我不明白我在说什么?
穆罕默德·阿里

它将从json数据中标识此属性所属的属性
标识符

1
你可以看到这真棒交代futurestud.io/tutorials/...
阿布舍克·库马尔

Answers:


254

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"
}

2
@MuhammadAli非常荣幸能为您提供帮助。您也可以通过投票给我功劳,并接受我亲爱的回答:)
Chintan Rathod 2015年

3
负面的选民,请添加您的评论,以便我理解
不赞成

4
好的答案....正确的点..例子Json很有帮助
Devrath

很高兴它有所帮助。:)
Chintan Rathod

1
真的很有帮助!; 非常感谢:) @ChintanRathod
Imran

64

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

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

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


1
Gr8信息,我曾经告诉proguard不要混淆模型。现在,我可以做到。:)
akashPatra '18

1
这是非常非常重要的。损失了2个小时,并且在每个地方都添加了@SerializedName。
Abhijit Kurane

2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.