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()); } }