2011-09-06 21 views
5

kullanarak Scala Json I serialize ve JSON'dan serisini mümkün olmak istiyorum:serialize listesi [Herhangi] olarak/Bir vaka sınıf var Jackson

case class Foo(values: List[Any]) 

örn Bu senaryoda

Foo(List(new DateTime)) 

, DateTime bir sürece tefrika ve dolayısıyla uzun bir yerine bir DateTime olarak seriden alır.

{"values":[1315343106920]} 

Öneriler: Bu gibi

? Bunun olması gereken şey, sınıfın (örneğin, DateTime) isminin serileştirilmesi ve serileştirme üzerinde kontrol edilmesi gerektiğidir. Değerler listesine koyabileceğim türlerin listesi sonlu/küçüktür. Bir kaba kuvvet çözüm gibi görünüyor başvurdu ettik

{"values":[{"DateTime":1315343106920}]} 

cevap

0

Jackson, örneğin manuel seri yapmak lazım: Belki böyle

o yardım edebilir misin diye

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 
    } 
+1

Emin değilim, ama Jerkson [https://github.com/codahale/jerkson] Jackson bir Scala özgü uzantısıdır ve düz Jackson daha iyi bu durumda idare olabilir? Benzer şekilde scala özel kullanımını iyileştirmeyi amaçlayan Jackson uzantısı modülü [https://github.com/FasterXML/jackson-module-scala] bulunmaktadır. – StaxMan