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

Muh*_*Ali 97 java android json gson

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

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

Chi*_*hod 234

Java类示例,

public class Person {

    @SerializedName("name")
    private String personName;

    @SerializedName("bd")
    private String birthDate;

}
Run Code Online (Sandbox Code Playgroud)

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

JSON示例,

{
    "name":"chintan",
    "bd":"01-01-1990"
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案......正确的观点......`Json`的例子很有帮助 (4认同)
  • 负面选民,请添加您的评论,以便我能理解投票的目的是什么,我可以改进我的答案...... :) (3认同)
  • 非常感谢你节省我的时间 (2认同)
  • @MuhammadAli很高兴为您提供帮助.你也可以通过upvote给我信用并接受我亲爱的答案:) (2认同)

San*_*iya 53

这里的答案已经很少了,但我想补充一点,如果您使用的ProGuard是模糊代码并且不在@SerializedName("name")模型类中使用,那么您的GSON将无法正常工作.因为混淆,你的变量名可能已经改变String nameString a导致破坏的GSON解析,因为GSON将寻找密钥a到json并且它将失败.

通过指定@SerializedName,GSON将不会基于变量名称查找json并且将仅使用指定的@SerializedName.

当然你可以告诉proguard不要模糊你的模型,但如果你想模型混淆,那么你必须指定 @SerializedName


小智 5

您可以通过在类顶部指定 @Keep 来指示 Proguard 不要混淆您的数据类。这既不会删除也不会混淆你的类。如果字段名称与所使用的 Json 键类似,则无需显式向每个字段添加 @SerializedName。


Dim*_*sus 5

使用 @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)

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