示例#1
0
        internal void WriteAttachTypeInfo(BinSerializer bs, Type type)
        {
            if (this.notWriteAttachInfo)
            {
                return;
            }

            if (this.PayloadType == PayloadType.Array)
            {
                Type elementType = type.GetElementType();
                bs.WriteType(elementType);
            }
            else
            {
                if (this.PayloadType == PayloadType.ExtKnownType) //扩展类型先写入扩展类型标识
                {
                    VariantHelper.WriteUInt32(this.extKnownTypeID.AssemblyID, bs.Stream);
                    VariantHelper.WriteUInt32(this.extKnownTypeID.TypeID, bs.Stream);
                }

                //再判断是否范型,是则写入范型各参数的类型信息
                if (this.GenericTypeCount > 0)
                {
                    var genericTypes = type.GetGenericArguments();
                    for (int i = 0; i < genericTypes.Length; i++)
                    {
                        bs.WriteType(genericTypes[i]);
                    }
                }
            }
        }
示例#2
0
        public override void Write(BinSerializer bs, object instance)
        {
            var list = (IList)instance;

            //先写入元素个数
            VariantHelper.WriteInt32(list.Count, bs.Stream);
            //再写入各元素
            bs.WriteCollection(instance.GetType().GetGenericArguments()[0], list.Count, (index) => list[index]);
        }
示例#3
0
        public override object Read(BinSerializer bs, object instance)
        {
            var list        = (IList)instance;
            var elementType = instance.GetType().GetGenericArguments()[0];
            //注意:需要读取元素个数
            var count = VariantHelper.ReadInt32(bs.Stream);

            bs.ReadCollection(elementType, count, (index, value) => list.Add(value));
            return(list);
        }
示例#4
0
        public override void Write(BinSerializer bs, object instance)
        {
            IDictionary dic = (IDictionary)instance;

            VariantHelper.WriteInt32(dic.Count, bs.Stream);
            foreach (var key in dic.Keys)
            {
                bs.Serialize(key);
                bs.Serialize(dic[key]);
            }
        }
示例#5
0
        public override object Read(BinSerializer bs, object instance)
        {
            int         count = VariantHelper.ReadInt32(bs.Stream);
            IDictionary dic   = (IDictionary)instance;

            for (int i = 0; i < count; i++)
            {
                dic.Add(bs.Deserialize(), bs.Deserialize());
            }
            return(instance);
        }
示例#6
0
        public string Read(BinSerializer bs)
        {
            int len = VariantHelper.ReadInt32(bs.Stream);

            if (len == -1)
            {
                return(null);
            }
            if (len == 0)
            {
                return(string.Empty);
            }
            return(StringHelper.ReadFrom(len, () => (byte)bs.Stream.ReadByte()));
        }
示例#7
0
 public void Write(BinSerializer bs, string instance)
 {
     if (instance == null)
     {
         VariantHelper.WriteInt32(-1, bs.Stream);
     }
     else if (instance == string.Empty)
     {
         VariantHelper.WriteInt32(0, bs.Stream);
     }
     else
     {
         VariantHelper.WriteInt32(instance.Length, bs.Stream);
         StringHelper.WriteTo(instance, b => bs.Stream.WriteByte(b));
     }
 }
示例#8
0
        public override void Write(BinSerializer bs, object instance)
        {
            var array       = (Array)instance;
            var elementType = array.GetType().GetElementType();

            //先写入元素个数
            VariantHelper.WriteInt32(array.Length, bs.Stream);
            //再写入各元素
            if (elementType == typeof(Byte))
            {
                bs.Stream.Write((byte[])array, 0, array.Length);
            }
            else
            {
                bs.WriteCollection(elementType, array.Length, (index) => array.GetValue(index));
            }
        }
示例#9
0
 public void Write(BinSerializer bs, DateTime instance)
 {
     VariantHelper.WriteInt64(instance.ToUniversalTime().Ticks, bs.Stream);
 }
示例#10
0
 public override void Write(BinSerializer bs, object obj)
 {
     VariantHelper.WriteUInt64((ulong)obj, bs.Stream);
 }
示例#11
0
 public void Write(BinSerializer bs, ulong obj)
 {
     VariantHelper.WriteUInt64(obj, bs.Stream);
 }
示例#12
0
 public ulong Read(BinSerializer bs)
 {
     return(VariantHelper.ReadUInt64(bs.Stream));
 }
示例#13
0
 public override object Read(BinSerializer bs, object instance)
 {
     return(VariantHelper.ReadUInt64(bs.Stream));
 }
示例#14
0
 public DateTime Read(BinSerializer bs)
 {
     return(new DateTime(VariantHelper.ReadInt64(bs.Stream), DateTimeKind.Utc).ToLocalTime());
 }
示例#15
0
 public override void Write(BinSerializer bs, object instance)
 {
     VariantHelper.WriteInt32(Convert.ToInt32(instance), bs.Stream); //todo: fix Convert.ToInt32
 }
示例#16
0
 public override void Write(BinSerializer bs, object instance)
 {
     VariantHelper.WriteInt64(((DateTime)instance).ToUniversalTime().Ticks, bs.Stream);
 }
示例#17
0
 public override void Write(BinSerializer bs, object obj)
 {
     VariantHelper.WriteInt32((int)obj, bs.Stream);
 }
示例#18
0
 public uint Read(BinSerializer bs)
 {
     return(VariantHelper.ReadUInt32(bs.Stream));
 }
示例#19
0
 public void Write(BinSerializer bs, uint obj)
 {
     VariantHelper.WriteUInt32(obj, bs.Stream);
 }
示例#20
0
        public override object Read(BinSerializer bs, object instance)
        {
            int value = VariantHelper.ReadInt32(bs.Stream);

            return(Enum.ToObject(this.TargetType, value));
        }
示例#21
0
 public override object Read(BinSerializer bs, object instance)
 {
     return(new DateTime(VariantHelper.ReadInt64(bs.Stream), DateTimeKind.Utc).ToLocalTime());
 }