//--------------------------------------------------------------- #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); } } } }
//--------------------------------------------------------------- #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); } }