[英]How do I serialize CharSequence to JSON with Play 2.1 and Scala
I'm having trouble serializing a class that uses CharSequence instead of String. 我在序列化使用CharSequence而不是String的类时遇到问题。 When I use Strings everything works fine.
当我使用Strings时,一切正常。
I have the following class: 我有以下课程:
case class Word(word: CharSequence,
meanings: Traversable[CharSequence],
readings: Traversable[CharSequence]) {
}
When I try to serialize it as so: 当我尝试将其序列化时:
...
val word = new Word("dog", List("Foo", "Goo"), List("Ba", "Fa"))
implicit val wordWrites = Json.writes[Word]
Ok(Json.toJson(word)).as(JSON)
I get the following error: 我收到以下错误:
error: exception during macro expansion:
scala.reflect.macros.TypecheckException: No implicit Writes for CharSequence, Traversable[CharSequence], Traversable[CharSequence] available.
at scala.reflect.macros.runtime.Typers$class.inferImplicit(Typers.scala:55)
at scala.reflect.macros.runtime.Typers$class.inferImplicitValue(Typers.scala:38)
at scala.reflect.macros.runtime.Context.inferImplicitValue(Context.scala:6)
at scala.reflect.macros.runtime.Context.inferImplicitValue(Context.scala:6)
at play.api.libs.json.JsMacroImpl$$anonfun$15.apply(JsMacroImpl.scala:332)
at play.api.libs.json.JsMacroImpl$$anonfun$15.apply(JsMacroImpl.scala:317)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:309)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at play.api.libs.json.JsMacroImpl$.writesImpl(JsMacroImpl.scala:317)
implicit val wordWrites = Json.writes[Word]
I understand that the authors of the serialization framework probably forgot to support CharSequence. 我知道序列化框架的作者可能忘了支持CharSequence。 However, how do I give the serializer a sensible default to call .toString() on all CharSequence instances?
但是,如何在所有CharSequence实例上为序列化程序提供合理的默认值来调用.toString()?
You can define a CharSequence Format: 您可以定义CharSequence格式:
implicit var csFormat = new Format[CharSequence] {
def writes(c: CharSequence): JsValue = Json.toJson(c.toString)
def reads(jv: JsValue): JsResult[String] = JsSuccess(Json.stringify(jv))
}
val word = new Word("dog", List("Foo", "Goo"), List("Ba", "Fa"))
implicit val wordWrites = Json.format[Word]
Ok(Json.toJson(word)).as(JSON)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.