public void Deserialize(IPofReader reader)
            {
                keysPolymorphic   = reader.ReadBoolean(0);
                valuesPolymorphic = reader.ReadBoolean(1);
                var count = reader.ReadS32(2);
                var data  = reader.ReadBytes(3);

                var context    = reader.Context;
                var serializer = new PofSerializer(context);

                using (var elementStream = new MemoryStream(data))
                    using (var elementStreamReader = new BinaryReader(elementStream)) {
                        Func <TKey> readKey = keysPolymorphic ? new Func <TKey>(() => (TKey)serializer.Deserialize(elementStreamReader))
                                                    : new Func <TKey>(() => (TKey)serializer.Deserialize(elementStreamReader, SerializationFlags.Typeless, typeof(TKey)));
                        Func <TValue> readValue = valuesPolymorphic ? new Func <TValue>(() => (TValue)serializer.Deserialize(elementStreamReader))
                                                        : new Func <TValue>(() => (TValue)serializer.Deserialize(elementStreamReader, SerializationFlags.Typeless, typeof(TValue)));
                        var items = new Dictionary <TKey, TValue>(count);
                        for (var i = 0; i < count; i++)
                        {
                            var key   = readKey();
                            var value = readValue();
                            items.Add(key, value);
                        }
                        this.items = items;
                    }
            }
            public void Deserialize(IPofReader reader)
            {
                isPolymorphic = reader.ReadBoolean(0);
                var length = reader.ReadS32(1);
                var data   = reader.ReadBytes(2);

                var context    = reader.Context;
                var serializer = new PofSerializer(context);

                using (var elementStream = new MemoryStream(data))
                    using (var elementStreamReader = new BinaryReader(elementStream)) {
                        Func <TElement> readElement = isPolymorphic ? new Func <TElement>(() => (TElement)serializer.Deserialize(elementStreamReader))
                                                          : new Func <TElement>(() => (TElement)serializer.Deserialize(elementStreamReader, SerializationFlags.Typeless, typeof(TElement)));
                        elements = Util.Generate(length, i => readElement());
                    }
            }