Example #1
0
        /// <summary>
        /// Serializes obj to byte[]. Passing Type can be used to avoid prefixing type to beginning of data. Important to match type parameter on deserialization.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public byte[] FromObject(object obj, Type type = null, bool prefixTypeData = true)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }
            if (type == null)
            {
                type = typeof(object);
            }

            DataWriter writer = GetDataWriter();

            writer.Reset();
            if (prefixTypeData)
            {
                type = obj.GetType(); //Has to match because whatever we prefix we will try to deserialize //TODO: Double check
                TypeCache typeCache = GetTypeCache(type);
                WriteType(type, obj, writer, typeCache.IsGeneric, true);
                Serialize(type, obj, writer, true, true);
            }
            else
            {
                Serialize(type, obj, writer, false, true);
            }
            return(writer.CopyBytes());
        }
        /// <summary>
        /// Serializes obj to byte[]. Does not append type to beginning of data.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public byte[] FromObject(Type type, object obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }

            DataWriter writer = GetDataWriter();

            writer.Reset();
            Serialize(obj, writer);
            return(writer.CopyBytes());
        }
        /// <summary>
        /// Serializes obj to byte[]. Appends type to beginning of data.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns>Serialized Data</returns>
        public byte[] FromObject(object obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }

            DataWriter writer = GetDataWriter();

            writer.Reset();
            Type      type      = obj.GetType();
            TypeCache typeCache = GetTypeCache(type);

            WriteType(type, obj, writer, typeCache.IsGeneric, true);
            Serialize(type, obj, writer, typeCache, true, true);
            return(_writer.CopyBytes());
        }