2014-12-13 45 views
3

是否可以使用Json4s或电梯或任何其他库序列化下面类的对象?是否有可能在Scala中序列化非案例类?

class User(uId: Int) extends Serializable { 
    var id: Int = uId 
    var active: Boolean = false 
    var numTweets: Int = 0 
    var followers: ArrayBuffer[Int] = null 
    var following: ArrayBuffer[Int] = null 
    var userTimeline: Queue[String] = null 
    var homeTimeline: Queue[String] = null 
    var userTimelineSize: Int = 0 
    var homeTimelineSize: Int = 0 
    //var notifications: Queue[String] = null 
    var mentions: Queue[String] = null 
    var directMessages: Queue[String] = null 
} 

回答

3

您可以使用Json4s用于此目的(与FieldSerializer帮助),下面是开始与User对象的序列代码:

def main(args: Array[String]) { 
    import org.json4s._ 
    import org.json4s.native.Serialization 
    import org.json4s.native.Serialization.{read, write, writePretty} 

    implicit val formats = DefaultFormats + FieldSerializer[User]() 

    val user = new User(12) 

    val json = write(user) 
    println(writePretty(user)) 
} 

此外,在您的非案例类东西这是从JSON中缺失的需要是一个选项。

另一种方法是去Genson

def main(args: Array[String]) { 
    import com.owlike.genson._ 
    import com.owlike.genson.ext.json4s._ 
    import org.json4s._ 
    import org.json4s.JsonDSL._ 
    import org.json4s.JsonAST._ 

    object CustomGenson { 
     val genson = new ScalaGenson(
     new GensonBuilder() 
     .withBundle(ScalaBundle(), Json4SBundle()) 
     .create() 
    ) 
    } 

    // then just import it in the places you want to use this instance instead of the default one 
    import CustomGenson.genson._ 

    val user = new User(12)  

    val jsonArray = toJson(user) 
    println(jsonArray) 
} 
+0

第一个选项没有工作。如果我使用第一个选项 – alchemist 2014-12-13 20:41:45

+0

,则编译器不会识别主类,但第一个选项对我无效。如果我使用第一个选项,编译器不会识别主类。第二个选项工作正常,但只有在将User类声明为case类之后。非常感谢你的帮助。你会知道为什么第一个选项不起作用吗? – alchemist 2014-12-13 20:48:40

+0

genson不会序列化一个Char到json ...任何想法为什么? – alchemist 2014-12-13 22:47:18