/// <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;
                }
            }
        }
Esempio n. 2
0
        /// <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;
                }
            }
        }
Esempio n. 3
0
        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;
                    }
                }
            }