Exemplo n.º 1
0
        public void Serialize(object obj, Stream stream)
        {
            BaseTypeConverter converter = ConvertersSelector.SelectConverter(obj);
            var serializationStream     = new SerializationStream(stream);

            converter.Serialize(obj, serializationStream);
        }
Exemplo n.º 2
0
        public T Deserialize <T>(byte[] stream)
        {
            var workingStream = new WorkingStream(stream);

            SerializedType deserializedType = workingStream.ReadSerializedType();

            if (deserializedType == SerializedType.Null)
            {
                return(default(T));
            }

            Type sourceType = deserializedType.GetBaseType();

            if (sourceType == null)
            {
                byte[] typeInfo = workingStream.ReadBytesWithSizePrefix();
                sourceType = TypeUtils.FromUTF8Bytes(typeInfo);
            }

            BaseTypeConverter converter = ConvertersSelector.SelectConverter(sourceType);

            if (converter is IEnumerableConverter)
            {
                var preparedData = converter.DeserializeToObject(stream) as IEnumerable;
                if (preparedData is IList)
                {
                    var listType     = typeof(List <>);
                    var genericArgs  = sourceType.GenericTypeArguments;
                    var concreteType = listType.MakeGenericType(genericArgs);
                    var data         = Activator.CreateInstance(concreteType);
                    foreach (var item in preparedData)
                    {
                        ((IList)data).Add(item);
                    }
                    return((T)data);
                }
                else
                {
                    return((T)preparedData);
                }
            }

            return((T)converter.DeserializeToObject(stream));
        }
Exemplo n.º 3
0
        public void Serialize(object obj, Stream stream)
        {
            BaseTypeConverter converter = ConvertersSelector.SelectConverter(obj);

            converter.Serialize(obj, stream);
        }