【问题标题】:What is the basic purpose of @SerializedName annotation in Android using Gson使用Gson在Android中@SerializedName注解的基本目的是什么
【发布时间】:2015-05-11 12:16:01
【问题描述】:

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

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

【问题讨论】:

  • javadoc 是怎么说的?
  • 我听不懂在说什么?
  • 它将从json数据中识别该属性所属的属性标识符
  • 你可以看到这个很棒的解释futurestud.io/tutorials/…

标签: java android json gson


【解决方案1】:

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

【讨论】:

  • @MuhammadAli 很高兴为您提供帮助。你也可以通过upvote给我信任并接受亲爱的回答:)
  • 反对的选民,请添加您的评论,以便我了解否决票的目的,然后我可以改进我的答案.. :)
  • 好答案 .... 切中要害 .... Json 的示例很有帮助
  • 很高兴它有帮助。 :)
  • 更多信息可以从here找到。
【解决方案2】:

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

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

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

【讨论】:

  • Gr8 信息,我曾经告诉 proguard 不要混淆模型。现在,有了这个我可以做到。 :)
  • 这是非常非常重要的。浪费了 2 个小时,并且在每个地方都添加了 @SerializedName。
  • 假设我的 API 端点响应有多个索引,例如 data { status : true, message : success, data :{name:demo,url: mysiet.com} } ,我可以在模型中使用 SerializedName像 @SerializedName("data.name") 一样获取名称值
  • @Ajith 不,那是不可能的。您需要创建一个单独的类来解析 nameurl
  • 我也尝试过,但是当我尝试时它不起作用。请发个例子好吗?
【解决方案3】:

使用@SerializedName 实际上是在接收来自服务器的回调(即 Json 格式)时告诉解析器:

{
    "name":"John Doe",
}

序列化反序列化对象而不是搜索在Json响应中名为“userName”的键时,搜索“名称”。

@SerializedName("name")
var userName: String,

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2016-04-17
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多