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]); } } } }
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]); }
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); }
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]); } }
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); }
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())); }
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)); } }
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)); } }
public void Write(BinSerializer bs, DateTime instance) { VariantHelper.WriteInt64(instance.ToUniversalTime().Ticks, bs.Stream); }
public override void Write(BinSerializer bs, object obj) { VariantHelper.WriteUInt64((ulong)obj, bs.Stream); }
public void Write(BinSerializer bs, ulong obj) { VariantHelper.WriteUInt64(obj, bs.Stream); }
public ulong Read(BinSerializer bs) { return(VariantHelper.ReadUInt64(bs.Stream)); }
public override object Read(BinSerializer bs, object instance) { return(VariantHelper.ReadUInt64(bs.Stream)); }
public DateTime Read(BinSerializer bs) { return(new DateTime(VariantHelper.ReadInt64(bs.Stream), DateTimeKind.Utc).ToLocalTime()); }
public override void Write(BinSerializer bs, object instance) { VariantHelper.WriteInt32(Convert.ToInt32(instance), bs.Stream); //todo: fix Convert.ToInt32 }
public override void Write(BinSerializer bs, object instance) { VariantHelper.WriteInt64(((DateTime)instance).ToUniversalTime().Ticks, bs.Stream); }
public override void Write(BinSerializer bs, object obj) { VariantHelper.WriteInt32((int)obj, bs.Stream); }
public uint Read(BinSerializer bs) { return(VariantHelper.ReadUInt32(bs.Stream)); }
public void Write(BinSerializer bs, uint obj) { VariantHelper.WriteUInt32(obj, bs.Stream); }
public override object Read(BinSerializer bs, object instance) { int value = VariantHelper.ReadInt32(bs.Stream); return(Enum.ToObject(this.TargetType, value)); }
public override object Read(BinSerializer bs, object instance) { return(new DateTime(VariantHelper.ReadInt64(bs.Stream), DateTimeKind.Utc).ToLocalTime()); }