使用Jackson将Scala中的List [List]序列化为来自Scala的Json
发布时间:2020-12-16 18:27:46 所属栏目:安全 来源:网络整理
导读:我有一个案例类,我希望能够从 JSON序列化和反序列化: case class Foo(values: List[Any]) 例如 Foo(List(new DateTime)) 在这种情况下,DateTime被序列化为long,因此反序列化为Long而不是dateTime. 像这样: {"values":[1315343106920]} 建议?我认为需要发
我有一个案例类,我希望能够从
JSON序列化和反序列化:
case class Foo(values: List[Any]) 例如 Foo(List(new DateTime)) 在这种情况下,DateTime被序列化为long,因此反序列化为Long而不是dateTime. 像这样: {"values":[1315343106920]} 建议?我认为需要发生的是类的名称(例如DateTime)需要序列化,并在反序列化时检查.我可能放在值列表中的类型列表是有限的/小的. 也许是这样的: {"values":[{"DateTime":1315343106920}]} 解决方法
我已经使用了看起来像蛮力的解决方案,只需与杰克逊进行手动序列化,例如
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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |