object IBinaryConverter.ReadBinary(IBinaryReader reader, SerializeMetadata context, IHolySerializer serializer) { var array = reader.Read(context.Length, context.IsReverse); var encoding = (context == null || string.IsNullOrWhiteSpace(context.Options)) ? Encoding.UTF8 : Encoding.GetEncoding(context.Options); return(encoding.GetString(array).TrimEnd('\0')); }
void IBinaryConverter.WriteBinary(IBinaryWriter writer, object value, SerializeMetadata context, IHolySerializer serializer) { var encoding = (context == null || string.IsNullOrWhiteSpace(context.Options)) ? Encoding.UTF8 : Encoding.GetEncoding(context.Options); var array = value == null?Array.Empty <byte>() : encoding.GetBytes(value.ToString()); if (context.Length > 0 && array.Length != context.Length) { var fillArray = new byte[context.Length]; Array.Copy(array, fillArray, array.Length > fillArray.Length ? fillArray.Length : array.Length); array = fillArray; } writer.Write(array, context.IsReverse); }
void IBinaryConverter.WriteBinary(IBinaryWriter writer, object value, SerializeMetadata context, IHolySerializer serializer) { byte[] array = null; var typeCode = value == null ? TypeCode.Empty : Type.GetTypeCode(value.GetType()); switch (typeCode) { case TypeCode.Boolean: array = BitConverter.GetBytes((bool)value); break; case TypeCode.Byte: array = new byte[] { (byte)value }; break; case TypeCode.Char: array = BitConverter.GetBytes((char)value); break; case TypeCode.DBNull: break; case TypeCode.DateTime: array = BitConverter.GetBytes(((DateTime)value).Ticks); break; case TypeCode.Decimal: { var bits = decimal.GetBits((decimal)value); var bytes = new List <byte>(); foreach (Int32 i in bits) { bytes.AddRange(BitConverter.GetBytes(i)); } array = bytes.ToArray(); } break; case TypeCode.Double: array = BitConverter.GetBytes((double)value); break; case TypeCode.Empty: break; case TypeCode.Int16: array = BitConverter.GetBytes((short)value); break; case TypeCode.Int32: array = BitConverter.GetBytes((int)value); break; case TypeCode.Int64: array = BitConverter.GetBytes((long)value); break; case TypeCode.SByte: array = new byte[] { (byte)value }; break; case TypeCode.Single: array = BitConverter.GetBytes((float)value); break; case TypeCode.UInt16: array = BitConverter.GetBytes((ushort)value); break; case TypeCode.UInt32: array = BitConverter.GetBytes((uint)value); break; case TypeCode.UInt64: array = BitConverter.GetBytes((ulong)value); break; default: break; } writer.Write(array, context.IsReverse); }
object IBinaryConverter.ReadBinary(IBinaryReader reader, SerializeMetadata context, IHolySerializer serializer) { var array = reader.Read(context.Length, context.IsReverse); object value = null; switch (Type.GetTypeCode(context.ObjectType)) { case TypeCode.Boolean: value = BitConverter.ToBoolean(array, 0); break; case TypeCode.Byte: value = array[0]; break; case TypeCode.Char: value = BitConverter.ToChar(array, 0); break; case TypeCode.DBNull: break; case TypeCode.DateTime: value = new DateTime(BitConverter.ToInt64(array, 0)); break; case TypeCode.Decimal: { if (array.Count() != 16) { throw new Exception("A decimal must be created from exactly 16 bytes"); } var bits = new Int32[4]; for (int i = 0; i <= 15; i += 4) { bits[i / 4] = BitConverter.ToInt32(array, i); } value = new decimal(bits); } break; case TypeCode.Double: value = BitConverter.ToDouble(array, 0); break; case TypeCode.Empty: break; case TypeCode.Int16: value = BitConverter.ToInt16(array, 0); break; case TypeCode.Int32: value = BitConverter.ToInt32(array, 0); break; case TypeCode.Int64: value = BitConverter.ToInt64(array, 0); break; case TypeCode.SByte: value = (sbyte)array[0]; break; case TypeCode.Single: value = BitConverter.ToSingle(array, 0); break; case TypeCode.UInt16: value = BitConverter.ToUInt16(array, 0); break; case TypeCode.UInt32: value = BitConverter.ToUInt32(array, 0); break; case TypeCode.UInt64: value = BitConverter.ToUInt64(array, 0); break; default: break; } return(value); }
object IBinaryConverter.ReadBinary(IBinaryReader reader, SerializeMetadata context, IHolySerializer serializer) { var array = reader.Read(context.Length == 0 ? reader.ReadRemainderLength() : context.Length, context.IsReverse); var value = Activator.CreateInstance(context.ObjectType); var childReader = serializer.ReaderCreator.Create(array); context.Childs.ForEach(b => { foreach (var c in serializer.Converters) { if (c.CanConvert(b)) { var val = c.ReadBinary(childReader, b, serializer); HelperExtension.SetValue(b.Name, value, new object[] { val }); break; } } ; }); return(value); }
void IBinaryConverter.WriteBinary(IBinaryWriter writer, object value, SerializeMetadata context, IHolySerializer serializer) { var buffer = new List <byte>(); context.Childs.ForEach(b => { var val = HelperExtension.GetValue(b.Name, value); var childWriter = serializer.WriterCreator.Create(); foreach (var c in serializer.Converters) { if (c.CanConvert(b)) { c.WriteBinary(childWriter, val, b, serializer); break; } } ; buffer.AddRange(childWriter.ToArray()); }); writer.Write(buffer.ToArray(), context.IsReverse); }
object IBinaryConverter.ReadBinary(IBinaryReader reader, SerializeMetadata context, IHolySerializer serializer) { return(CreateConverter(context).ReadBinary(reader, context, serializer)); }
void IBinaryConverter.WriteBinary(IBinaryWriter writer, object value, SerializeMetadata context, IHolySerializer serializer) { CreateConverter(context).WriteBinary(writer, value, context, serializer); }
object IBinaryConverter.ReadBinary(IBinaryReader reader, SerializeMetadata context, IHolySerializer serializer) { var array = reader.Read(context.Length, context.IsReverse); return(array); }
void IBinaryConverter.WriteBinary(IBinaryWriter writer, object value, SerializeMetadata context, IHolySerializer serializer) { writer.Write((value as IEnumerable <byte>).ToArray(), context.IsReverse); }
void IBinaryConverter.WriteBinary(IBinaryWriter writer, object value, SerializeMetadata context, IHolySerializer serializer) { var guid = (Guid)value; guid.ToByteArray(); writer.Write(guid.ToByteArray(), context.IsReverse); }