Esempio n. 1
0
        public TArg GetSerializerArg <TArg>(Type type, SerializerSettings settings, ISerializerArg serializerArg) where TArg : class, ISerializerArg
        {
            if (serializerArg == null && settings != null)
            {
                settings.SerializerArgMap.TryGetValue(type, out serializerArg);
            }

            if (serializerArg == null)
            {
                serializerArg = SerializerRegistry.GetSerializerArg(type);
            }

            return(serializerArg as TArg);
        }
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var typedSerializerArg = GetSerializerArg <FloatingPointSerializerArg>(type, settings, serializerArg);

            if (typedSerializerArg != null)
            {
                if (typedSerializerArg.DecimalDigits >= 0)
                {
                    bw.WriteCompactDecimal(Convert.ToDecimal(value), typedSerializerArg.DecimalDigits);
                    return;
                }
            }

            bw.Write((float)(object)value);
        }
Esempio n. 3
0
        internal static void SerializeObject <T>(Type type, T value, BinaryTypesWriter bw, SerializerSettings settings, ISerializer serializer, ISerializerArg serializerArg)
        {
            serializer = GetSerializer(type, serializer);
            if (serializer == null)
            {
                throw new Exception($"SerializeObject: serializer not found for type {type.FullName}");
            }

            if (type.IsClass && serializer.CommonNullHandle)
            {
                bw.Write(value != null);
                if (value == null)
                {
                    return;
                }
            }

            serializer.Serialize(bw, type, settings, serializerArg, value);
        }
Esempio n. 4
0
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            int count = br.Read7BitInt();

            if (count == -1)
            {
                return(null);
            }
            var  instance       = (IList)Activator.CreateInstance(type);
            Type genericArgtype = type.GetGenericArguments()[0];

            for (int i = 0; i < count; i++)
            {
                instance.Add(Serializer.DeserializeObject(br, genericArgtype, settings, null, null));
            }
            return(instance);
        }
Esempio n. 5
0
 public abstract object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg);
Esempio n. 6
0
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            if (br.ReadBoolean() == false) //null
            {
                return(null);
            }
            var nullableUnderlyingType = Nullable.GetUnderlyingType(type);
            var serializer             = SerializerRegistry.GetSerializer(nullableUnderlyingType);

            return(Serializer.DeserializeObject(br, nullableUnderlyingType, settings, serializer, serializerArg));
        }
Esempio n. 7
0
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            Array array = value as Array;

            if (array == null)
            {
                bw.Write7BitLong(-1);
                return;
            }

            var count = array.Length;

            bw.Write7BitLong(count);
            Type elementType = array.GetType().GetElementType();

            for (int i = 0; i < count; i++)
            {
                Serializer.SerializeObject(elementType, array.GetValue(i), bw, settings, null, null);
            }
        }
Esempio n. 8
0
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var classMap = SerializerRegistry.GetClassMap(type); //todo: also base types?

            var fastReflectionClassMap = GetFastReflectionClassMap(type);
            var propNames = fastReflectionClassMap.PropertyInfos.Keys.ToList();

            foreach (var propName in propNames)
            {
                MemberMap memberMap = classMap?.GetMemberMap(propName);
                if (memberMap?.Ignored == true)
                {
                    continue;
                }

                var pInfo = fastReflectionClassMap.PropertyInfos[propName];

                var val = pInfo.Getter(value);

                Serializer.SerializeObject(pInfo.PropertyType, val, bw, settings, memberMap?.Serializer, memberMap?.SerializerArg);
            }
        }
Esempio n. 9
0
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            var typedSerializerArg = GetSerializerArg <DateTimeSerializerArg>(type, settings, serializerArg);

            if (typedSerializerArg != null && typedSerializerArg.TickResolution > 0)
            {
                return(new TimeSpan(br.Read7BitLong() * typedSerializerArg.TickResolution));
            }

            return(new TimeSpan(br.Read7BitLong()));
        }
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            var val = br.Read7BitLong();

            return(Convert.ChangeType(val, type));
        }
Esempio n. 11
0
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            var classMap = SerializerRegistry.GetClassMap(type); //todo: also base types?

            var fastReflectionClassMap = GetFastReflectionClassMap(type);
            var propNames = fastReflectionClassMap.PropertyInfos.Keys.ToList();
            var instance  = fastReflectionClassMap.CreateInstance(Type.EmptyTypes); //Activator.CreateInstance(type);

            foreach (var propName in propNames)
            {
                MemberMap memberMap = classMap?.GetMemberMap(propName);
                if (memberMap?.Ignored == true)
                {
                    continue;
                }

                var pInfo = fastReflectionClassMap.PropertyInfos[propName];
                pInfo.Setter(
                    ref instance,
                    Serializer.DeserializeObject(br, pInfo.PropertyType, settings, memberMap?.Serializer, memberMap?.SerializerArg));
            }


            return(instance);
        }
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var val = Convert.ChangeType(value, typeof(ulong));

            bw.Write7BitULong((ulong)val);
        }
Esempio n. 13
0
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var hashset = value as System.Collections.IEnumerable;

            if (hashset == null)
            {
                bw.Write7BitLong(-1);
                return;
            }

            var method = type.GetProperty("Count");
            var count  = (int)method.GetValue(hashset);

            bw.Write7BitLong(count);
            Type genericArgtype = type.GetGenericArguments()[0];

            foreach (var val in hashset)
            {
                Serializer.SerializeObject(genericArgtype, val, bw, settings, null, null);
            }
        }
Esempio n. 14
0
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            int count = br.Read7BitInt();

            if (count == -1)
            {
                return(null);
            }
            var  instance       = Activator.CreateInstance(type);
            Type genericArgtype = type.GetGenericArguments()[0];
            var  method         = type.GetMethod("Add");

            for (int i = 0; i < count; i++)
            {
                method.Invoke(
                    instance,
                    new object[] { Serializer.DeserializeObject(br, genericArgtype, settings, null, null) });
            }
            return(instance);
        }
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var typedSerializerArg = GetSerializerArg <DateTimeSerializerArg>(type, settings, serializerArg);

            if (typedSerializerArg != null && typedSerializerArg.TickResolution > 0)
            {
                bw.WriteCompactDateTime((DateTime)value, typedSerializerArg.TickResolution);
                return;
            }

            bw.Write7BitLong(((DateTime)(object)value).Ticks); //todo: compact
        }
Esempio n. 16
0
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var props = type.GetProperties();//.Select().ToList();

            foreach (var prop in props)
            {
                Serializer.SerializeObject(prop.PropertyType, prop.GetValue(value), bw, settings, null, null);
            }
        }
Esempio n. 17
0
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            bw.Write(value != null);
            if (value == null)
            {
                return;
            }
            var nullableUnderlyingType = Nullable.GetUnderlyingType(type);
            var serializer             = SerializerRegistry.GetSerializer(nullableUnderlyingType);

            Serializer.SerializeObject(nullableUnderlyingType, value, bw, settings, serializer, serializerArg);
        }
Esempio n. 18
0
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            var props = type.GetProperties();
            var args  = new object[props.Length];

            for (int i = 0; i < props.Length; i++)
            {
                args[i] = Serializer.DeserializeObject(br, props[i].PropertyType, settings, null, null);
            }

            var instance = Activator.CreateInstance(type, args);

            return(instance);
        }
Esempio n. 19
0
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            int count = br.Read7BitInt();

            if (count == -1)
            {
                return(null);
            }
            var instance = Array.CreateInstance(type.GetElementType(), count);

            for (int i = 0; i < count; i++)
            {
                instance.SetValue(Serializer.DeserializeObject(br, type.GetElementType(), settings, null, null), i);
            }
            return(instance);
        }
 public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
 {
     bw.Write((string)(object)value);
 }
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var dictionary = value as IDictionary;

            if (dictionary == null)
            {
                bw.Write7BitLong(-1);
                return;
            }
            var count = dictionary.Count;

            bw.Write7BitLong(count);
            Type genericArgKey = type.GetGenericArguments()[0];
            Type genericArgVal = type.GetGenericArguments()[1];

            foreach (var key in dictionary.Keys)
            {
                Serializer.SerializeObject(genericArgKey, key, bw, settings, null, null);
                Serializer.SerializeObject(genericArgVal, dictionary[key], bw, settings, null, null);
            }
        }
 public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
 {
     return(br.ReadString());
 }
Esempio n. 23
0
 public abstract void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value);
Esempio n. 24
0
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var guidByte = ((Guid)value).ToByteArray();

            Serializer.SerializeObject(typeof(byte[]), guidByte, bw, settings, null, null);
        }
Esempio n. 25
0
 public static void RegisterSerializerArg(Type type, ISerializerArg serializerArg)
 {
     _serializerArgMap[type] = serializerArg;
 }
Esempio n. 26
0
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            var guidByte = (byte[])Serializer.DeserializeObject(br, typeof(byte[]), settings, null, null);

            return(new Guid(guidByte));
        }
Esempio n. 27
0
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            IList list = value as IList;

            if (list == null)
            {
                bw.Write7BitLong(-1);
                return;
            }

            var count = list.Count;

            bw.Write7BitLong(count);
            Type genericArgtype = type.GetGenericArguments()[0];

            for (int i = 0; i < count; i++)
            {
                Serializer.SerializeObject(genericArgtype, list[i], bw, settings, null, null);
            }
        }
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            var typedSerializerArg = GetSerializerArg <DateTimeSerializerArg>(type, settings, serializerArg);

            if (typedSerializerArg != null && typedSerializerArg.TickResolution > 0)
            {
                return(br.ReadCompactDateTime(typedSerializerArg.TickResolution));
            }

            return(new DateTime(br.Read7BitLong(), DateTimeKind.Utc)); //todo: compact
        }
Esempio n. 29
0
        internal static object DeserializeObject(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializer serializer, ISerializerArg serializerArg)
        {
            serializer = GetSerializer(type, serializer);
            if (serializer == null)
            {
                throw new Exception($"SerializeObject: serializer not found for type {type.FullName}");
            }

            if (type.IsClass && serializer.CommonNullHandle)
            {
                if (br.ReadBoolean() == false) //null
                {
                    return(null);
                }
            }

            return(serializer.Deserialize(br, type, settings, serializerArg));
        }
        public override object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg)
        {
            var typedSerializerArg = GetSerializerArg <FloatingPointSerializerArg>(type, settings, serializerArg);

            if (typedSerializerArg != null)
            {
                if (typedSerializerArg.DecimalDigits >= 0)
                {
                    var decValue = br.ReadCompactDecimal(typedSerializerArg.DecimalDigits);
                    return((float)decValue);
                }
            }

            return(br.ReadSingle());
        }