Reputation: 41
Is it possible to serialize object of below class using Json4s or lift or any other library?
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
}
Upvotes: 3
Views: 1053
Reputation: 9403
You can use Json4s for this purpose (with help of FieldSerializer
), below is the code to get started with serialization of the User
object:
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))
}
Also, in your non case class anything which is missing from the JSON needs to be an Option.
Another method would be to go for 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)
}
Upvotes: 4