internal static void BaseSerialize <childType>(BinarySerializer serializer, childType value) where childType : T { if (serializer.CheckPoint(value)) { StructSerialize(serializer, value); } }
/// <summary> /// 对象序列化 /// </summary> /// <param name="serializer">二进制数据序列化</param> /// <param name="value">数据对象</param> internal static void ClassSerialize(BinarySerializer serializer, T value) { if (DefaultSerializer == null) { if (serializer.CheckPoint(value)) { if (serializer.Config.IsRealType) { Type type = value.GetType(); if (type != typeof(T)) { //if (serializer.CheckPoint(value)) { serializer.Stream.Write(BinarySerializer.RealTypeValue); //SerializeMethodCache.GetRealSerializer(type)(serializer, value); GenericType.Get(type).BinarySerializeRealTypeObjectDelegate(serializer, value); } return; } } if (AutoCSer.Metadata.DefaultConstructor <T> .Type == DefaultConstructorType.None) { serializer.Stream.Write(BinarySerializer.NullValue); } else { MemberSerialize(serializer, ref value); } } } else { DefaultSerializer(serializer, value); } }
/// <summary> /// 找不到构造函数 /// </summary> /// <param name="serializer">二进制数据序列化</param> /// <param name="value">数据对象</param> private static void noConstructor(BinarySerializer serializer, T value) { if (serializer.CheckPoint(value)) { if (serializer.Config.IsRealType) { Type type = value.GetType(); if (type == typeof(T)) { serializer.Stream.Write(BinarySerializer.NullValue); } //else SerializeMethodCache.GetRealSerializer(type)(serializer, value); else { GenericType.Get(type).BinarySerializeRealTypeObjectDelegate(serializer, value); } } else { serializer.Stream.Write(BinarySerializer.NullValue); } } }