Esempio n. 1
0
        //---------------------------------------------------------------
        #endregion
        //---------------------------------------------------------------

        //---------------------------------------------------------------
        #region ISerializer Members
        //---------------------------------------------------------------
        /// <summary>
        /// Serializes the given object.
        /// </summary>
        /// <param name="obj">The object to serialize.</param>
        /// <param name="stream">Stream to fill with data.</param>
        public void Serialize(object obj, SerializeStream stream)
        {
            Type type = obj.GetType();

            MemberInfo[] infos = type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic |
                                                 BindingFlags.Instance);
            for (int i = 0; i < infos.Length; i++)
            {
                if (infos[i].IsDefined(typeof(SerializeAttribute), false))
                {
                    SerializeAttribute attribute = (SerializeAttribute)
                                                   infos[i].GetCustomAttributes(typeof(SerializeAttribute), false)[0];

                    FieldInfo    info  = infos[i] as FieldInfo;
                    PropertyInfo pInfo = infos[i] as PropertyInfo;

                    if (info != null)
                    {
                        if (attribute.Primitive)
                        {
                            stream.Write(info.Name, info.GetValue(obj));
                        }
                        else
                        {
                            stream.WriteAsObject(info.Name, info.GetValue(obj));
                        }
                    }
                    else if (pInfo != null && pInfo.CanRead && pInfo.CanWrite)
                    {
                        if (attribute.Primitive)
                        {
                            stream.Write(pInfo.Name, pInfo.GetValue(obj, null));
                        }
                        else
                        {
                            stream.WriteAsObject(pInfo.Name, pInfo.GetValue(obj, null));
                        }
                    }
                    else
                    {
                        throw new Exception("Can't get AND set member: " + pInfo.Name);
                    }
                }
            }
        }
Esempio n. 2
0
        //---------------------------------------------------------------
        #endregion
        //---------------------------------------------------------------

        //---------------------------------------------------------------
        #region Methods
        //---------------------------------------------------------------
        /// <summary>
        /// Serializes the given object.
        /// </summary>
        /// <param name="obj">The object to serialize.</param>
        /// <param name="stream">Stream to fill with data.</param>
        public void Serialize(object obj, SerializeStream stream)
        {
            stream.Write("elementType", array.GetType().GetElementType());
            stream.Write("length", array.Length);
            for (int i = 0; i < array.Length; i++)
            {
                object value = array.GetValue(i);
                stream.WriteAsObject(null, value);
            }
        }