public override object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type) { var obj = new object(); serializer.InternalAddReadObjToCacheList(obj); return(obj); }
public override object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type) { var method_write = this.GetType() .GetMethod("ReadGeneric", BindingFlags.Static | BindingFlags.NonPublic) .MakeGenericMethod(type.GetGenericArguments()); return(method_write.Invoke(null, new object[] { serializer, reader })); }
public override void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj) { var method_write = this.GetType() .GetMethod("WriteGeneric", BindingFlags.Static | BindingFlags.NonPublic) .MakeGenericMethod(obj.GetType().GetGenericArguments()); method_write.Invoke(null, new object[] { serializer, writer, obj }); }
static void WriteGeneric <T>(IBinarySerializerForHandle serializer, BinaryWriter writer, List <T> obj) { writer.Write(obj.Count); for (int i = 0; i < obj.Count; ++i) { serializer.InternalWrite(writer, obj[i], typeof(T)); } }
public override object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type) { int count = reader.ReadInt32(); var obj = reader.ReadBytes(count); serializer.InternalAddReadObjToCacheList(obj); return(obj); }
static void WriteGeneric <TKey, TValue>(IBinarySerializerForHandle serializer, BinaryWriter writer, Dictionary <TKey, TValue> obj) { writer.Write(obj.Count); foreach (var item in obj) { serializer.InternalWrite(writer, item.Key, typeof(TKey)); serializer.InternalWrite(writer, item.Value, typeof(TValue)); } }
public override void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj) { var fields = serializer.GetClassFieldInfos(obj.GetType()); foreach (var field in fields) { var val = field.GetValue(obj); serializer.InternalWrite(writer, val, field.FieldType); } }
static object ReadGeneric <T>(IBinarySerializerForHandle serializer, BinaryReader reader) { int count = reader.ReadInt32(); List <T> obj = new List <T>(count); serializer.InternalAddReadObjToCacheList(obj); for (int i = 0; i < count; ++i) { obj.Add((T)serializer.InternalRead(reader, typeof(T))); } return(obj); }
public override void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj) { Array arr = (Array)obj; var type = obj.GetType(); var element_type = type.GetElementType(); int rank = type.GetArrayRank(); int[] lengths = new int[rank]; int[] lowerBounds = new int[rank]; int[] uperBounds = new int[rank]; int[] idxs = new int[rank];// for read will use bool is_empty = false; for (int i = 0; i < rank; ++i) { lengths[i] = arr.GetLength(i); writer.Write(lengths[i]); lowerBounds[i] = arr.GetLowerBound(i); writer.Write(lowerBounds[i]); uperBounds[i] = arr.GetUpperBound(i); idxs[i] = lowerBounds[i]; is_empty = is_empty || (lengths[i] == 0); } if (is_empty) { return; // why c# allow `new int[0,0]` } for (; ;) { var val = arr.GetValue(idxs); serializer.InternalWrite(writer, val, element_type); // next int dim = rank - 1; for (; dim >= 0; --dim) { if (idxs[dim] < uperBounds[dim]) { break; } } if (dim == -1) { break; // loop end } idxs[dim]++; for (dim++; dim < rank; ++dim) { idxs[dim] = lowerBounds[dim]; } } }
public override object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type) { int rank = type.GetArrayRank(); var element_type = type.GetElementType(); int[] lengths = new int[rank]; int[] lowerBounds = new int[rank]; int[] uperBounds = new int[rank]; int[] idxs = new int[rank];// for read will use bool is_empty = false; for (int i = 0; i < rank; ++i) { lengths[i] = reader.ReadInt32(); lowerBounds[i] = reader.ReadInt32(); uperBounds[i] = lengths[i] - 1 + lowerBounds[i]; idxs[i] = lowerBounds[i]; is_empty = is_empty || (lengths[i] == 0); } var arr = Array.CreateInstance(element_type, lengths, lowerBounds); serializer.InternalAddReadObjToCacheList(arr); if (is_empty) { return(arr);// why c# allow `new int[0,0]` } for (; ;) { var val = serializer.InternalRead(reader, element_type); arr.SetValue(val, idxs); // next int dim = rank - 1; for (; dim >= 0; --dim) { if (idxs[dim] < uperBounds[dim]) { break; } } if (dim == -1) { break; // loop end } idxs[dim]++; for (dim++; dim < rank; ++dim) { idxs[dim] = lowerBounds[dim]; } } return(arr); }
static object ReadGeneric <TKey, TValue>(IBinarySerializerForHandle serializer, BinaryReader reader) { int count = reader.ReadInt32(); Dictionary <TKey, TValue> obj = new Dictionary <TKey, TValue>(count); serializer.InternalAddReadObjToCacheList(obj); for (int i = 0; i < count; ++i) { TKey key = (TKey)serializer.InternalRead(reader, typeof(TKey)); TValue value = (TValue)serializer.InternalRead(reader, typeof(TValue)); obj.Add(key, value); } return(obj); }
public override object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type) { var fields = serializer.GetClassFieldInfos(type); object obj = FormatterServices.GetUninitializedObject(type); if (type.IsValueType == false) { serializer.InternalAddReadObjToCacheList(obj); } foreach (var field in fields) { var val = serializer.InternalRead(reader, field.FieldType); field.SetValue(obj, val); } return(obj); }
public override IEnumerable <Type> AddSubtypes(IBinarySerializerForHandle serializer, Type type) { if (type.IsAbstract || type.IsInterface) { yield break;// can not use new Type[0] } else { var fields = GetFieldInfos(type); var fields_array = fields.ToArray(); serializer.AddClassFieldInfos(type, fields_array); foreach (var field in fields_array) { yield return(field.FieldType); } } }
public override object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type) { object obj = serializer.InternalRead(reader, Enum.GetUnderlyingType(type)); return(obj);// Enum里没有好的方法转换类型,发现可以直接= }
public override IEnumerable <Type> AddSubtypes(IBinarySerializerForHandle serializer, Type type) { yield return(type.GetElementType()); }
/// <summary> /// Return types that are needed to serialize the given type /// </summary> public virtual IEnumerable <Type> AddSubtypes(IBinarySerializerForHandle serializer, Type type) { yield break; }
public abstract object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type);
public override IEnumerable <Type> AddSubtypes(IBinarySerializerForHandle serializer, Type type) { return(type.GetGenericArguments()); }
public override object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type) { long v = reader.ReadInt64(); return(DateTime.FromBinary(v)); }
public override void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj) { long v = ((DateTime)obj).ToBinary(); writer.Write(v); }
public override object Read(IBinarySerializerForHandle serializer, BinaryReader reader, Type type) { return(reader.ReadDecimal()); }
public override void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj) { writer.Write((decimal)obj); }
public override IEnumerable <Type> AddSubtypes(IBinarySerializerForHandle serializer, Type type) { return(new[] { Enum.GetUnderlyingType(type) }); }
public override void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj) { serializer.InternalWrite(writer, obj, Enum.GetUnderlyingType(obj.GetType())); }
public override void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj) { byte[] data = (byte[])obj; writer.Write(data.Length); writer.Write(data); }
public override void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj) { Debug.Assert(typeof(object) == obj.GetType()); return; }
public abstract void Write(IBinarySerializerForHandle serializer, BinaryWriter writer, object obj);