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); }
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); }
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); }
public abstract object Deserialize(BinaryTypesReader br, Type type, SerializerSettings settings, ISerializerArg serializerArg);
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)); }
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 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); } }
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)); }
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); }
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); } }
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 }
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); } }
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 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); }
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()); }
public abstract void Serialize(BinaryTypesWriter bw, Type type, SerializerSettings settings, ISerializerArg serializerArg, object value);
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 static void RegisterSerializerArg(Type type, ISerializerArg serializerArg) { _serializerArgMap[type] = serializerArg; }
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)); }
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 }
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()); }