Sie können eine CustomSerializer
verwenden. Sie können nur Serialisierung anpassen, indem Sie eine leeres PartialFunction
als Deserializer Bereitstellung:
trait Ignore
case class A(a: Int) extends Ignore
case class B(f: String, a: A, d: Int)
implicit val formats = DefaultFormats +
new CustomSerializer[Ignore](formats => (
PartialFunction.empty,
{ case _: Ignore => JNothing }
))
// prints "{"f":"x","d":2}"
println(Serialization.write(B("x", A(1), 2)))
// deserializes to B(x,A(1),2)
println(Serialization.read[B]("""{"f":"x","a":{"a":1},"d":2}"""))
edit: Zum Zeitpunkt des Schreibens (3.3.0) json4s-native hat einen Bug, das serialisierte Objekt rendert falsch, wenn die ersten Feld wird ignoriert (zB case class B(a: A, ...)
ich schlage vor, mit json4s-jackson, bis das Problem
mit ersten Extraction.decompose
gelöst und nach Serialization
scheint das Problem zu lösen.
trait Ignore
case class A(a: Int) extends Ignore
case class B(a: A, d: Int)
implicit val formats = DefaultFormats +
new CustomSerializer[Ignore](formats => (
PartialFunction.empty,
{ case _: Ignore => JNothing }
))
// prints {,"d":2}
println(Serialization.write(B(A(1), 2)))
// prints {"d":2}
println(Serialization.write(Extraction.decompose(B(A(1), 2))))
Ja, das funktioniert, aber wenn ich ein Feld am Anfang der Felder B setzen, erzeugt es ungültiges json. Zum Beispiel: 'Fallklasse B (a: A, d: Int)' ergibt '" {, d ": 2}" Wie kann man das beheben? – maks
@maks Es funktioniert für mich: '{" d ": 2}'. Verwenden Sie eine alte Version von json4s? Ich bin auf 3.3.0 –
@maks Ok, ich habe nicht überprüft, aber ich denke, dass mein Code funktioniert, weil ich json4s-jackson verwende. Verwenden Sie nativ? –