public static T Read(Stream stream, T instance, int version)
            {
                var minSupportedVersion = SerializerTypes.GetMinSupported(Type);

                if (version < minSupportedVersion)
                {
                    throw new InvalidDataException($"Received version less than minimum supported ({ version } < { minSupportedVersion })");
                }

                var boxedInstance = (object)instance;

                while (true)
                {
                    var token = stream.ReadString();
                    if (token == SerializerTypes.TypeEndToken)
                    {
                        break;
                    }

                    if (!FieldsMap.TryGetValue(token, out BinField binField))
                    {
                        continue;
                    }

                    var value = BinSerializer <object> .Deserialize(stream);

                    binField.SetValue(boxedInstance, value);
                }

                return((T)boxedInstance);
            }
Exemplo n.º 2
0
        public static List <T> ReadList <T>(Stream stream, List <T> instance, int version)
        {
            var count = stream.ReadInt32();

            instance.Capacity = count;
            for (int i = 0; i < count; i++)
            {
                var value = BinSerializer.Deserialize <T>(stream);
                instance.Add(value);
            }
            return(instance);
        }
Exemplo n.º 3
0
        public static Dictionary <TKey, TValue> ReadDictionary <TKey, TValue>(Stream stream, Dictionary <TKey, TValue> instance, int version)
        {
            var count = stream.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                var key   = BinSerializer.Deserialize <TKey>(stream);
                var value = BinSerializer.Deserialize <TValue>(stream);
                instance.Add(key, value);
            }
            return(instance);
        }
Exemplo n.º 4
0
 public static T Deserialize <T>(Stream stream)
 {
     return(BinSerializer <T> .Deserialize(stream));
 }