/// <summary> /// 真实类型 /// </summary> /// <param name="deSerializer">二进制数据反序列化</param> /// <param name="value">数据对象</param> private static void realType(DeSerializer deSerializer, ref valueType value) { RemoteType remoteType = default(RemoteType); TypeDeSerializer <RemoteType> .GetDeSerializer(deSerializer.GlobalVersion).MemberDeSerialize(deSerializer, ref remoteType); if (deSerializer.State == DeSerializeState.Success) { Type type; if (remoteType.TryGet(out type)) { if (value == null || type.IsValueType) { //value = (valueType)DeSerializeMethodCache.GetRealDeSerializer(type)(deSerializer, value); value = (valueType)GenericType.Get(type).BinaryDeSerializeRealTypeObjectDelegate(deSerializer, value); } //else DeSerializeMethodCache.GetRealDeSerializer(type)(deSerializer, value); else { GenericType.Get(type).BinaryDeSerializeRealTypeObjectDelegate(deSerializer, value); } } else { deSerializer.State = DeSerializeState.RemoteTypeError; } } }
/// <summary> /// 真实类型 /// </summary> /// <param name="deSerializer">二进制数据反序列化</param> /// <param name="value">数据对象</param> private static void realType(DeSerializer deSerializer, ref valueType value) { RemoteType remoteType = default(RemoteType); TypeDeSerializer <RemoteType> .StructDeSerialize(deSerializer, ref remoteType); if (deSerializer.State == DeSerializeState.Success) { Type type; if (remoteType.TryGet(out type)) { if (value == null || type.IsValueType) { value = (valueType)DeSerializeMethodCache.GetRealDeSerializer(type)(deSerializer, value); } else { DeSerializeMethodCache.GetRealDeSerializer(type)(deSerializer, value); } } else { deSerializer.State = DeSerializeState.RemoteTypeError; } } }
private void deSerialize(ref Type value) { if (CheckPoint(ref value)) { RemoteType remoteType = default(RemoteType); int point = (int)(start - Read); TypeDeSerializer <RemoteType> .DeSerialize(this, ref remoteType); if (State == DeSerializeState.Success) { if (remoteType.TryGet(out value)) { if (isReferenceMember) points.Add(point, value); } } else { State = DeSerializeState.ErrorType; } } }