我的理解是json-lift支持开箱即用的Option字段。
以下是示例对象定义:
class TopicModel (
var id: Option[Long],
var name: String,
val slug: String,
var imageUrl: Option[String] )
{}
然后我使用net.liftweb.json.Serialization.read[Topic](jsonString)
来读取对象
如果传入的JSON中存在所有字段,则反序列化工作正常。但是,如果我省略了Option字段:
{"id": "35", "name": "My topic", "slug": "my-slug" /** imageUrl missing */}
对象返回时将所有字段设置为null。
另一个有趣的事实:当代码位于Play应用程序的app目录下时,这只是一个问题。如果我们把它放在其他地方并作为一个罐子包含它就可以了。
有一种观点认为这是Scala 2.8的问题(我们使用的是Play 1.2.3 / Akka 1.0,并且仅限于使用最新的Scala)。
任何帮助将不胜感激......