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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
            }
        }
Exemple #6
0
        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);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
            }
        }