Example #1
0
        /// <summary>
        /// 真实类型
        /// </summary>
        /// <param name="deSerializer">二进制数据反序列化</param>
        /// <param name="value">数据对象</param>
        private static void realType(BinaryDeSerializer deSerializer, ref T value)
        {
            AutoCSer.Reflection.RemoteType remoteType = default(AutoCSer.Reflection.RemoteType);
            TypeDeSerializer <AutoCSer.Reflection.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 = (T)GenericType.Get(type).BinaryDeSerializeRealTypeObjectDelegate(deSerializer, value);
                    }
                    //else DeSerializeMethodCache.GetRealDeSerializer(type)(deSerializer, value);
                    else
                    {
                        GenericType.Get(type).BinaryDeSerializeRealTypeObjectDelegate(deSerializer, value);
                    }
                }
                else
                {
                    deSerializer.State = DeSerializeState.RemoteTypeError;
                }
            }
        }
Example #2
0
        /// <summary>
        /// 真实类型序列化
        /// </summary>
        /// <param name="serializer"></param>
        /// <param name="value"></param>
        internal static void RealTypeObject(BinarySerializer serializer, object value)
        {
            if (isValueType)
            {
                AutoCSer.Reflection.RemoteType remoteType = typeof(T);
                TypeSerializer <AutoCSer.Reflection.RemoteType> .MemberSerialize(serializer, ref remoteType);

                StructSerialize(serializer, (T)value);
            }
            else
            {
                if (AutoCSer.Metadata.DefaultConstructor <T> .Type == DefaultConstructorType.None)
                {
                    serializer.Stream.Write(BinarySerializer.NullValue);
                }
                else
                {
                    AutoCSer.Reflection.RemoteType remoteType = typeof(T);
                    TypeSerializer <AutoCSer.Reflection.RemoteType> .MemberSerialize(serializer, ref remoteType);

                    if (DefaultSerializer == null)
                    {
                        //if (serializer.CheckPoint(value)) MemberSerialize(serializer, (valueType)value);
                        T newValue = (T)value;
                        MemberSerialize(serializer, ref newValue);
                    }
                    else
                    {
                        DefaultSerializer(serializer, (T)value);
                    }
                }
            }
        }
 public void CallSerialize(Type type)
 {
     if (type == null)
     {
         CharStream.WriteJsonNull();
     }
     else
     {
         AutoCSer.Reflection.RemoteType remoteType = new AutoCSer.Reflection.RemoteType(type);
         TypeSerializer <AutoCSer.Reflection.RemoteType> .MemberSerialize(this, ref remoteType);
     }
 }