2014-12-13 2 views
3

Json4s 또는 리프트 또는 다른 라이브러리를 사용하여 아래 클래스의 객체를 직렬화 할 수 있습니까?스칼라에서 비 케이스 클래스를 직렬화 할 수 있습니까?

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

당신은 아래의 User 객체의 직렬화를 시작하는 코드입니다 (FieldSerializer의 도움으로)이 목적을 위해 Json4s를 사용할 수 있습니다 이외의 경우 클래스 아무것도,

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

+0

을 사용하면 컴파일러가 주 클래스를 인식하지 못합니다. 첫 번째 옵션은 저에게 맞지 않습니다. 컴파일러는 첫 번째 옵션을 사용하는 경우 주 클래스를 인식하지 못했습니다. 두 번째 옵션은 User 클래스를 case 클래스로 선언 한 후에 만 ​​잘 동작했습니다. 도와 주셔서 정말로 고맙습니다. 왜 첫 번째 옵션이 작동하지 않는지 아시겠습니까? – alchemist

+0

genson은 json에게 Char를 연재하지 않습니다 ... 어떤 아이디어입니까? – alchemist

관련 문제