mbraceproject / FsPickler

A fast multi-format message serializer for .NET
http://mbraceproject.github.io/FsPickler/
MIT License
324 stars 52 forks source link

Replacement for member f.UnPickleOfString (valueType : Type? #46

Closed CumpsD closed 9 years ago

CumpsD commented 9 years ago

In 1.2 the following got removed:

   /// <summary>
    ///     Unpickle value to given type.
    /// </summary>
    /// <param name="valueType">type of pickled value.</param>
    /// <param name="pickle">Pickle.</param>
    /// <param name="streamingContext">streaming context.</param>
    member f.UnPickleOfString (valueType : Type, pickle : string, [<O;D(null)>]?streamingContext) : obj =
        unpickleString (fun m -> f.Deserialize(valueType, m, ?streamingContext = streamingContext)) pickle

I was using this in the following way:

    let deserialize<'a> (event: ResolvedEvent) =
        let serializedString = Encoding.UTF8.GetString event.Event.Data
        let serializedType = typedefof<'a>
        let event = json.UnPickleOfString(valueType = serializedType, pickle = serializedString)
        event :?> 'a

What is the intended usage with the rewritten API to accomplish the same goal?

eiriktsarpalis commented 9 years ago

The method has been replaced by this:

    /// <summary>
    ///     Pickles given value to string using provided pickler.
    /// </summary>
    /// <param name="value">Value to pickle.</param>
    /// <param name="pickler">Untyped pickler used for serialization. Its type should be compatible with that of the supplied object.</param>
    /// <param name="streamingContext">Streaming context for serialization state. Defaults to the empty streaming context.</param>
    member f.PickleToStringUntyped (value : obj, pickler : Pickler, [<O;D(null)>]?streamingContext : StreamingContext) : string =
        pickleString (fun m v -> f.SerializeUntyped(m, v, pickler, ?streamingContext = streamingContext)) value

the valueType parameter has been replaced with the mandatory untyped pickler parameter. I would write your code as follows:

    let deserialize<'a> (event: ResolvedEvent) =
        let serializedString = Encoding.UTF8.GetString event.Event.Data
        let event : 'a = json.UnPickleOfString<'a>(serializedString)
        event
CumpsD commented 9 years ago

Thanks, that works :+1: :)