示例#1
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);
            }
        }
示例#2
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);
        }
        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
        }
示例#4
0
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var typedSerializerArg = GetSerializerArg <FloatingPointSerializerArg>(type, settings, serializerArg);

            if (typedSerializerArg != null)
            {
                bw.WriteCompactDecimal((decimal)(object)value, typedSerializerArg.DecimalDigits);
                return;
            }

            bw.WriteCompactDecimal((decimal)(object)value);
        }
示例#5
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);
            }
        }
示例#6
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);
            }
        }
        public override void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value)
        {
            var classMap = SerializerRegistry.GetClassMap(type); //todo: also base types?

            var props = value.GetType().GetProperties()
                        .OrderBy(x => x.MetadataToken)
                        .ToList();

            foreach (var prop in props)
            {
                MemberMap memberMap = classMap?.GetMemberMap(prop.Name);
                if (memberMap?.Ignored == true)
                {
                    continue;
                }

                var val = prop.GetValue(value);
                Serializer.SerializeObject(prop.PropertyType, val, bw, settings, memberMap?.Serializer, memberMap?.SerializerArg);
            }
        }
        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);
            }
        }
示例#9
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);
            }
        }
示例#10
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);
            }
        }
示例#11
0
 public abstract void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value);
示例#12
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);
        }
 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 val = Convert.ChangeType(value, typeof(ulong));

            bw.Write7BitULong((ulong)val);
        }