mbraceproject / FsPickler

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

Cannot deserialize record with two fields of same CLI type #11

Closed vasily-kirichenko closed 10 years ago

vasily-kirichenko commented 10 years ago
type T =
    { F1: IList<int>
      F2: IList<int> }

let t = 
    { F1 = [||]
      F2 = [||] }

let p = FsPickler()
let ms = new MemoryStream()
p.Serialize(ms, t :> obj)
ms.Position <- 0L
let p1: obj = p.Deserialize ms

result:

System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at FsPickler.ArrayPickler.reader@67-13.Invoke(Reader r)
   at FsPickler.Pickler`1.UntypedRead(Reader r, Boolean managed)
   at FsPickler.Reader.Read[T](Pickler`1 pickler)
   at recordDeserializer(Pickler[] , Reader )
   at FsPickler.Pickler`1.UntypedRead(Reader r, Boolean managed)
   at FsPickler.Reader.Read[T](Pickler`1 pickler)
   at FsPickler.FsPickler.Deserialize[T](Stream stream, FSharpOption`1 streamingContext, FSharpOption`1 encoding, FSharpOption`1 leaveOpen)
   at <StartupCode$FSI_0158>.$FSI_0158.main@() in FsPicklerTest.fsx:line 76
eiriktsarpalis commented 10 years ago

Fixed in c215a7e3221474d044ed97fe562718aa76f00523

eiriktsarpalis commented 10 years ago

Patched in the latest nuget version