Ale*_*ack 5 json scala jackson
我有一个案例类,我希望能够从JSON序列化和反序列化:
case class Foo(values: List[Any])
Run Code Online (Sandbox Code Playgroud)
例如
Foo(List(new DateTime))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,DateTime被序列化为long,因此反序列化为Long而不是dateTime.
像这样:
{"values":[1315343106920]}
Run Code Online (Sandbox Code Playgroud)
建议?我认为需要发生的是类的名称(例如DateTime)需要序列化,并检查反序列化.我可能放在值列表中的类型列表是有限的/小的.
也许是这样的:
{"values":[{"DateTime":1315343106920}]}
Run Code Online (Sandbox Code Playgroud)
我采用了看似蛮力的解决方案来仅使用 Jackson 进行手动序列化,例如
def serializeNode(foo: Foo, mapper: ObjectMapper): JsonNode = {
val n = mapper.createObjectNode()
val valuesNode = mapper.createArrayNode()
n.put("values", valuesNode)
foo.values.foreach { value =>
val nd = mapper.createObjectNode
value match {
case intValue: Int => nd.put("int", intValue)
case decimalValue: BigDecimal => nd.put("decimal", decimalValue.bigDecimal)
case booleanValue: Boolean => nd.put("boolean", booleanValue)
case strValue: String => nd.put("string", strValue)
case dtValue: DateTime => nd.put("datetime", _dtFmt.print(dtValue))
case _ => sys.error("Unexpected value type: " + value)
}
valuesNode.add(nd)
}
n
}
def serialize(foo: Foo): String = {
val out = new StringWriter
val generator = new JsonFactory().createJsonGenerator(out)
val mapper = new ObjectMapper
generator.setCodec(mapper)
generator.writeTree(serializeNode(foo, mapper))
out.toString
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |