是否可以将Scala案例类序列化为JSON并能够提供自定义序列化名称?
例如,在Java中,这可以使用Gson库完成:
public class SomeClassWithFields {
@SerializedName("name") private final String someField;
private final String someOtherField;
public SomeClassWithFields(String a, String b) {
this.someField = a;
this.someOtherField = b;
}
}
我尝试在Scala中执行此操作:
案例类SomeClassWithFields(@SerializedName(“name”) someField:字符串)
但它似乎没有效果。
有什么想法?
答案 0 :(得分:1)
是的,可以做到。方法如下:
case class SomeClassWithFields(@(SerializedName @scala.annotation.meta.field)("name") someField:String)
语法很奇怪(注意外部'@'包装了“SerializedName”和scala字段注释)但它工作正常。有关详细信息,请参阅:https://issues.scala-lang.org/plugins/servlet/mobile#issue/SI-8975
答案 1 :(得分:1)
通过将其作为自定义注释来进一步改善Corindiano的答案,该注释可以在其他地方(重新)使用。
import scala.annotation.meta.field
case class SomeClassWithFields(@SerializedNameField(value = "name") someField:String) { ... }
object SomeClassWithFields {
type SerializedNameField = com.google.gson.annotations.SerializedName @field
}
答案 2 :(得分:0)
你可以使用spray-json调用jsonFormat overloads。
以下是您的示例:
import spray.json._
case class SomeClassWithFields( someField:String)
object SomeClassJsonProtocol extends DefaultJsonProtocol {
implicit val someClassFormat = jsonFormat(SomeClassWithFields,"name")
}