[Lift] Re: lift-json serialization primitive types

2009-11-02 Thread Joni Freeman

Hi,

Custom serialization and deserialization functions are now supported
in trunk. Please see updated docs in section Serializing non-
supported types:

http://github.com/dpp/liftweb/tree/master/lift-base/lift-json/

Cheers Joni


On 25 loka, 14:27, Christophe Dehlinger
christophedehlin...@gmail.com wrote:
 Hi,

 Is there a way to configure lift-json's case class serialization so that it
 uses Joda DateTimes instead of java.util.Date ?
 I'd like to known how to make the simple following code work as expected:

 import net.liftweb.json._
 import org.joda.time._

 case class MyCaseClass(dt: DateTime)

 object TestMain {
   def main(args: Array[String]) {
     implicit val formats = DefaultFormats
     println(Serialization.read[MyCaseClass]({ dt :
 2009-10-25T12:50:37.560+01:00 }))
     println(Serialization.write(MyCaseClass(new DateTime)))
   }

 }

 (running this code yields:
 MyCaseClass(2009-10-25T12:57:03.366+01:00)  -- current date when the
 program was run, not the date in the code
 {}
 )

 More generally, is there a way to customize lift-json's serialization
 mappings, in particular the types lift-json sees as primitive ?
 The class I'm actually interested in serializing has many fields whose type
 is a non-case class MyRichFloat with a single Float field. It would be
 really nice if I could (de)serialize these into JSON floats.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] Re: lift-json serialization primitive types

2009-10-25 Thread Joni Freeman

Hi,

Serializing joda-time is not supported. Last week a type hint
mechanism was added to support serialization of polymorphic Lists.
This could be generalized a bit so that users can provide de-/
serializers for any type. This could be done for instance using a pair
of partial functions. Something like:

type TypeHint = String

def serialize: PartialFunction[Any, JValue]
def deserialize: PartialFunction[(TypeHint, JValue), Any]

Then a support to serialize joda-time DateTime could be implemented
as:

def serialize(a: Any) = a match {
  case d: DateTime = JString(t, toString(d))
}

def deserialize(hint: TypeHint, json: JValue) = (hint, json) match {
  case (DateTime, JString(t, JString(t)) = mkDateTime(t)
}

I'm in a middle of something else right now but will look into this
next.

Cheers Joni

On 25 loka, 14:27, Christophe Dehlinger
christophedehlin...@gmail.com wrote:
 Hi,

 Is there a way to configure lift-json's case class serialization so that it
 uses Joda DateTimes instead of java.util.Date ?
 I'd like to known how to make the simple following code work as expected:

 import net.liftweb.json._
 import org.joda.time._

 case class MyCaseClass(dt: DateTime)

 object TestMain {
   def main(args: Array[String]) {
     implicit val formats = DefaultFormats
     println(Serialization.read[MyCaseClass]({ dt :
 2009-10-25T12:50:37.560+01:00 }))
     println(Serialization.write(MyCaseClass(new DateTime)))
   }

 }

 (running this code yields:
 MyCaseClass(2009-10-25T12:57:03.366+01:00)  -- current date when the
 program was run, not the date in the code
 {}
 )

 More generally, is there a way to customize lift-json's serialization
 mappings, in particular the types lift-json sees as primitive ?
 The class I'm actually interested in serializing has many fields whose type
 is a non-case class MyRichFloat with a single Float field. It would be
 really nice if I could (de)serialize these into JSON floats.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Lift group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---