Example #1
0
        /// <summary>
        /// Serializes the specified stream.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="obj">The object.</param>
        /// <param name="objectMetaData">The object meta data.</param>
        /// <exception cref="System.ArgumentNullException">The <paramref name="stream"/> is <c>null</c>.</exception>
        /// <exception cref="System.ArgumentNullException">The <paramref name="objectMetaData"/> is <c>null</c>.</exception>
        public static void Serialize(Stream stream, object obj, IObjectMetaData objectMetaData)
        {
            Argument.IsNotNull("stream", stream);
            Argument.IsNotNull("objectMetaData", objectMetaData);

            if (obj == null || objectMetaData.DataType == DataType.Undefined)
            {
                Write(stream, "NuLl");
            }
            else if (objectMetaData.DataType != DataType.Collection && objectMetaData.DataType != DataType.Object)
            {
                Write(stream, obj);
            }
            else if (objectMetaData.DataType == DataType.Collection)
            {
                var collection = obj as ICollection;
                if (collection == null)
                {
                    return;
                }

                Write(stream, collection.Count);
                foreach (var item in collection)
                {
                    Serialize(stream, item, objectMetaData.ChildObjMetaData);
                }
            }
            else
            {
                foreach (var propertyMetaData in objectMetaData.PropertiesMetaData)
                {
                    Serialize(stream, propertyMetaData.PropertyInfo.GetValue(obj, null), propertyMetaData);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Discovers the type information.
        /// </summary>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="objectMetaData">The object meta data.</param>
        private static void DiscoverTypeInfo(Type objectType, IObjectMetaData objectMetaData)
        {
            while (true)
            {
                if (objectType == null)
                {
                    return;
                }

                objectMetaData.Type = objectType;
                var dataType = GetType(objectType);

                if (dataType != DataType.Undefined)
                {
                    return;
                }

                var collectionElementType = GetElementType(objectType);
                if (collectionElementType != null)
                {
                    objectMetaData.DataType           = DataType.Collection;
                    objectMetaData.CollectionItemType = collectionElementType;

                    objectMetaData.ChildObjMetaData = new ObjectMetaData();
                    objectType     = collectionElementType;
                    objectMetaData = objectMetaData.ChildObjMetaData;
                    continue;
                }
                objectMetaData.DataType           = DataType.Object;
                objectMetaData.PropertiesMetaData = new List <IObjectMetaData>();

                foreach (var propertyInfo in objectType.GetProperties().OrderBy(property => property.Name))
                {
                    if (!propertyInfo.PropertyType.IsPublicEx() || propertyInfo.GetSetMethod() == null)
                    {
                        continue;
                    }
                    var propertyMetaData = new ObjectMetaData {
                        PropertyInfo = propertyInfo
                    };

                    DiscoverTypeInfo(propertyInfo.PropertyType, propertyMetaData);

                    objectMetaData.PropertiesMetaData.Add(propertyMetaData);
                }
                break;
            }
        }
Example #3
0
        /// <summary>
        /// Decimals the serialize.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="objectMetaData">The object meta data.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">The <paramref name="stream"/> is <c>null</c>.</exception>
        /// <exception cref="System.ArgumentNullException">The <paramref name="objectMetaData"/> is <c>null</c>.</exception>
        public static object DeSerialize(Stream stream, IObjectMetaData objectMetaData)
        {
            Argument.IsNotNull("stream", stream);
            Argument.IsNotNull("objectMetaData", objectMetaData);

            var position = stream.Position;

            if ((string)Read(stream, typeof(string)) == "NuLl" || objectMetaData.DataType == DataType.Undefined)
            {
                return(null);
            }
            if (objectMetaData.DataType != DataType.Collection && objectMetaData.DataType != DataType.Object)
            {
                stream.Position = position;
                return(Read(stream, objectMetaData.Type));
            }
            var obj = TypeFactory.Default.CreateInstance(objectMetaData.Type);

            stream.Position = position;

            if (obj is ICollection)
            {
                var count = (int)Read(stream, typeof(int));

                for (var i = 0; i < count; i++)
                {
                    obj.GetType()
                    .GetMethod("Add")
                    .Invoke(obj, new[] { DeSerialize(stream, objectMetaData.ChildObjMetaData) });
                }
                return(obj);
            }

            foreach (var propertyMetaData in objectMetaData.PropertiesMetaData)
            {
                propertyMetaData.PropertyInfo.SetValue(obj, DeSerialize(stream, propertyMetaData), null);
            }
            return(obj);
        }
Example #4
0
        /// <summary>
        /// Serializes the specified stream.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="obj">The object.</param>
        /// <param name="objectMetaData">The object meta data.</param>
        /// <exception cref="System.ArgumentNullException">The <paramref name="stream"/> is <c>null</c>.</exception>
        /// <exception cref="System.ArgumentNullException">The <paramref name="objectMetaData"/> is <c>null</c>.</exception>
        public static void Serialize(Stream stream, object obj, IObjectMetaData objectMetaData)
        {
            Argument.IsNotNull("stream", stream);
            Argument.IsNotNull("objectMetaData", objectMetaData);

            if (obj == null || objectMetaData.DataType == DataType.Undefined)
            {
                Write(stream, "NuLl");
            }
            else if (objectMetaData.DataType != DataType.Collection && objectMetaData.DataType != DataType.Object)
            {
                Write(stream, obj);
            }
            else if (objectMetaData.DataType == DataType.Collection)
            {
                var collection = obj as ICollection;
                if (collection == null)
                {
                    return;
                }

                Write(stream, collection.Count);
                foreach (var item in collection)
                {
                    Serialize(stream, item, objectMetaData.ChildObjMetaData);
                }
            }
            else
            {
                foreach (var propertyMetaData in objectMetaData.PropertiesMetaData)
                {
                    Serialize(stream, propertyMetaData.PropertyInfo.GetValue(obj, null), propertyMetaData);
                }
            }
        }
Example #5
0
        /// <summary>
        /// Discovers the type information.
        /// </summary>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="objectMetaData">The object meta data.</param>
        private static void DiscoverTypeInfo(Type objectType, IObjectMetaData objectMetaData)
        {
            while (true)
            {
                if (objectType == null)
                {
                    return;
                }

                objectMetaData.Type = objectType;
                var dataType = GetType(objectType);

                if (dataType != DataType.Undefined)
                {
                    return;
                }

                var collectionElementType = GetElementType(objectType);
                if (collectionElementType != null)
                {
                    objectMetaData.DataType = DataType.Collection;
                    objectMetaData.CollectionItemType = collectionElementType;

                    objectMetaData.ChildObjMetaData = new ObjectMetaData();
                    objectType = collectionElementType;
                    objectMetaData = objectMetaData.ChildObjMetaData;
                    continue;
                }
                objectMetaData.DataType = DataType.Object;
                objectMetaData.PropertiesMetaData = new List<IObjectMetaData>();

                foreach (var propertyInfo in objectType.GetProperties().OrderBy(property => property.Name))
                {
                    if (!propertyInfo.PropertyType.IsPublicEx() || propertyInfo.GetSetMethod() == null)
                    {
                        continue;
                    }
                    var propertyMetaData = new ObjectMetaData {PropertyInfo = propertyInfo};

                    DiscoverTypeInfo(propertyInfo.PropertyType, propertyMetaData);

                    objectMetaData.PropertiesMetaData.Add(propertyMetaData);
                }
                break;
            }
        }
Example #6
0
        /// <summary>
        /// Decimals the serialize.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="objectMetaData">The object meta data.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">The <paramref name="stream"/> is <c>null</c>.</exception>
        /// <exception cref="System.ArgumentNullException">The <paramref name="objectMetaData"/> is <c>null</c>.</exception>
        public static object DeSerialize(Stream stream, IObjectMetaData objectMetaData)
        {
            Argument.IsNotNull("stream", stream);
            Argument.IsNotNull("objectMetaData", objectMetaData);

            var position = stream.Position;
            if ((string) Read(stream, typeof (string)) == "NuLl" || objectMetaData.DataType == DataType.Undefined)
            {
                return null;
            }
            if (objectMetaData.DataType != DataType.Collection && objectMetaData.DataType != DataType.Object)
            {
                stream.Position = position;
                return Read(stream, objectMetaData.Type);
            }
            var obj = TypeFactory.Default.CreateInstance(objectMetaData.Type);
            stream.Position = position;

            if (obj is ICollection)
            {
                var count = (int) Read(stream, typeof (int));

                for (var i = 0; i < count; i++)
                {
                    obj.GetType()
                        .GetMethod("Add")
                        .Invoke(obj, new[] {DeSerialize(stream, objectMetaData.ChildObjMetaData)});
                }
                return obj;
            }

            foreach (var propertyMetaData in objectMetaData.PropertiesMetaData)
            {
                propertyMetaData.PropertyInfo.SetValue(obj, DeSerialize(stream, propertyMetaData), null);
            }
            return obj;
        }