Scala:将case类序列化为JSON,备用名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala:将case类序列化为JSON,备用名称相关的知识,希望对你有一定的参考价值。

有什么方法可以将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中这样做:

case类SomeClassWithFields(@SerializedName(“name”)someField:String)

但似乎没有效果。

有什么想法吗 ?

答案

你可以用spray-json调用jsonFormat overloads来做到这一点。

以下是它如何与您的示例一起使用:

import spray.json._

case class SomeClassWithFields( someField:String)

object SomeClassJsonProtocol extends DefaultJsonProtocol {
  implicit val someClassFormat = jsonFormat(SomeClassWithFields,"name")
}
另一答案

是的,可以做到。这是如何做:

case class SomeClassWithFields(@(SerializedName @scala.annotation.meta.field)("name") someField:String)

语法很奇怪(注意外部'@'包装了“SerializedName”和scala字段注释)但它工作正常。查看更多详情:https://issues.scala-lang.org/plugins/servlet/mobile#issue/SI-8975

以上是关于Scala:将case类序列化为JSON,备用名称的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 反序列化为 C# 类,其中 JSON 中的属性名称是动态的

如何将 JSON (snake_case) 反序列化为动态 (PascalCase)?

将 JSON 包反序列化为具有自定义属性名称的类

如何在 Scala 中将 Map 序列化为 JSON?

在调用API后,将JSON对象反序列化为C#类[重复]。

将对象列表序列化为没有父对象名称的 JSON