【发布时间】:2020-08-05 13:32:52
【问题描述】:
我有以下代码
case class BaseObject(
...
dnsRecord: Array[DNSEntry],
@SerializedName("dnsRecord") dnsEntries: Array[DNSEntry]
)
当我运行序列化时,dnsRecord 工作正常,而 dnsEntries 为空...
更新
@fluffy 让我想起了another question 我前段时间看到所以我把东西改成了
case class BaseObject(
...
dnsRecord: Array[DNSEntry],
@(SerializedName@scala.annotation.meta.field)("dnsRecord") dnsEntries: Array[DNSEntry]
)
这引发了一个问题,因为它试图使用已使用的 dnsRecord 字段。
【问题讨论】:
-
使用 Java 库而不是 Scala 库的任何理由? - 顺便说一句,Arrays 通常不鼓励使用,但由于它们是可变的,它们不应该在 case 类中。
-
Scala,因为它运行在 Spark 集群上,转换起来太痛苦了
-
我最近遇到了很多关于在 Scala 中使用 Gson 的问题,我现在最多只能说:Gson 不能在 Scala 中正常工作,应该找到更好的工具。原因:Scala 在幕后做了很多 Gson 不知道的复杂事情,同时它是一个纯 Java 专用工具。 Kotlin 也是如此。在stackoverflow.com/questions/63125448/… 和stackoverflow.com/questions/62259410/… 上查看更多信息
-
现在回到这个问题。
@SerializedName旨在使用字段,而不是(案例类构造函数)参数,只要 GsonReflectiveTypeAdapterFactory考虑对象字段,而不是其方法。在第二个链接的 Q/A 中有更深入的解释。简而言之,@(SerializedName@field)("dnsRecord") dnsEntries: Array[DNSEntry]可能适合您。 -
@JGleason 我的建议是只使用
List或Vector并使用 circe 或 ujson 或 play-json 或任何其他用于解析 json 的 Scala 原生库。