public override string Deserialize(ValueStream stream) { var union = new UnifiedUnion( (byte)stream.ReadByte(), (byte)stream.ReadByte(), (byte)stream.ReadByte(), (byte)stream.ReadByte()); var length = union.Int32; var stringBuffer = new byte[length]; stream.Read(stringBuffer, 0, stringBuffer.Length); return(Encoding.UTF8.GetString(stringBuffer)); }
public override void Serialize(ValueStream stream, DateTime data) { var binary = data.ToBinary(); var union = new UnifiedUnion(binary); stream.WriteByte(union.Byte1); stream.WriteByte(union.Byte2); stream.WriteByte(union.Byte3); stream.WriteByte(union.Byte4); stream.WriteByte(union.Byte5); stream.WriteByte(union.Byte6); stream.WriteByte(union.Byte7); stream.WriteByte(union.Byte8); }
public object Deserialize(ValueStream stream, Type dataType) { if (disposed) { throw new ObjectDisposedException(nameof(Serializer)); } if (dataType == null) { throw new ArgumentNullException(nameof(dataType)); } if (!dataType.IsValueType || Nullable.GetUnderlyingType(dataType) != null) { if (stream.ReadByte() == 0) { return(null); } } var dto = converterContainer.TryGetDto(dataType); if (dto?.Converter != null) { return(dto.Converter.DeserializeObject(stream, dataType)); } if (stream.ReadByte() == 1) { var aliasBytes = new byte[4]; stream.Read(aliasBytes, 0, aliasBytes.Length); var alias = new UnifiedUnion(aliasBytes[0], aliasBytes[1], aliasBytes[2], aliasBytes[3]).Int32; dataType = converterContainer.GetTypeFromAlias(alias); } var instance = activator.Create(dataType); var propertyInfo = EnsureProperties(dataType); for (var i = 0; i < propertyInfo.Length; i++) { propertyInfo[i].SetValue(instance, Deserialize(stream, propertyInfo[i].PropertyType)); } return(instance); }
public override void Serialize(ValueStream stream, ICollection elements) { var elementType = elements.GetType().GetGenericArguments()[0]; var union = new UnifiedUnion(elements.Count); stream.WriteByte(union.Byte1); stream.WriteByte(union.Byte2); stream.WriteByte(union.Byte3); stream.WriteByte(union.Byte4); foreach (var element in elements) { serializer.Serialize(stream, element, elementType); } }
public override void Serialize(ValueStream stream, Array elements) { var elementType = elements.GetType().GetElementType(); var union = new UnifiedUnion(elements.Length); stream.WriteByte(union.Byte1); stream.WriteByte(union.Byte2); stream.WriteByte(union.Byte3); stream.WriteByte(union.Byte4); for (var i = 0; i < elements.Length; i++) { serializer.Serialize(stream, elements.GetValue(i), elementType); } }
public override void Serialize(ValueStream stream, IList elements) { var elementType = elements.GetType().GetGenericArguments()[0]; var union = new UnifiedUnion(elements.Count); stream.WriteByte(union.Byte1); stream.WriteByte(union.Byte2); stream.WriteByte(union.Byte3); stream.WriteByte(union.Byte4); for (var i = 0; i < elements.Count; i++) { serializer.Serialize(stream, elements[i], elementType); } }
public override void Serialize(ValueStream stream, IEnumerable data) { var elements = data.Cast <object>().ToList(); var elementType = data.GetType().GetGenericArguments()[0]; var union = new UnifiedUnion(elements.Count); stream.WriteByte(union.Byte1); stream.WriteByte(union.Byte2); stream.WriteByte(union.Byte3); stream.WriteByte(union.Byte4); foreach (var element in elements) { serializer.Serialize(stream, element, elementType); } }
public override object DeserializeObject(ValueStream stream, Type type) { var elementType = type.GetElementType(); var length = new UnifiedUnion( (byte)stream.ReadByte(), (byte)stream.ReadByte(), (byte)stream.ReadByte(), (byte)stream.ReadByte()).Int32; var array = Array.CreateInstance(elementType, length); for (var i = 0; i < length; i++) { array.SetValue(serializer.Deserialize(stream, elementType), i); } return(array); }
public override object DeserializeObject(ValueStream stream, Type type) { var elementType = type.GetGenericArguments()[0]; var length = new UnifiedUnion( (byte)stream.ReadByte(), (byte)stream.ReadByte(), (byte)stream.ReadByte(), (byte)stream.ReadByte()).Int32; if (type.IsInterface) { type = OpenListType.MakeGenericType(elementType); } var list = (IList)activator.Create(type); for (var i = 0; i < length; i++) { list.Add(serializer.Deserialize(stream, elementType)); } return(list); }
public void Serialize(ValueStream stream, object data, Type dataTypeOverride) { if (disposed) { throw new ObjectDisposedException(nameof(Serializer)); } if (dataTypeOverride == null) { throw new ArgumentNullException(nameof(dataTypeOverride)); } if (data == null) { stream.WriteByte(0); return; } var dataType = data.GetType(); if (!dataType.IsValueType || Nullable.GetUnderlyingType(dataType) != null) { stream.WriteByte(1); } var dto = converterContainer.TryGetDto(dataType); if (dto == null) { dataType = dataTypeOverride; dto = converterContainer.TryGetDto(dataTypeOverride); } else { if (dto.Converter != null) { dto.Converter.SerializeObject(stream, data); return; } } if (dto == null) { stream.WriteByte(0); } else { stream.WriteByte(1); var union = new UnifiedUnion(dto.EntityAlias); stream.WriteByte(union.Byte1); stream.WriteByte(union.Byte2); stream.WriteByte(union.Byte3); stream.WriteByte(union.Byte4); } foreach (var property in EnsureProperties(dataType)) { Serialize(stream, property.GetValue(data), property.PropertyType); } }