#region License and Copyright /* * Dotnet Commons Reflection * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the * Free Software Foundation, Inc., * 59 Temple Place, * Suite 330, * Boston, * MA 02111-1307 * USA * */ #endregion using System; using System.Collections; using System.IO; using System.Reflection; using System.Runtime.Serialization.Formatters.Binary; using System.Text; namespace Dotnet.Commons.Reflection { /// ----------------------------------------------------------------------- /// <summary> /// This utility class contains a rich sets of utility methods that perform operations /// on objects during runtime such as copying of property and field values /// between 2 objects, deep cloning of objects, etc. /// </summary> /// ----------------------------------------------------------------------- public abstract class ObjectUtils { /// ------------------------------------------------------------------------ /// <summary> /// Helper to display the "contents" of the Value Object /// </summary> /// <param name="valueObject"></param> /// <returns></returns> /// ------------------------------------------------------------------------ public static string ConvertToString(object valueObject) { StringBuilder buffy = new StringBuilder(valueObject.GetType().FullName); // null objects cannot be reflected if(valueObject == null) { buffy.Append(" is null."); return buffy.ToString(); } buffy.Append("[ "); foreach(PropertyInfo objProperty in valueObject.GetType().GetProperties()) { string nvp; nvp = " <<Property>> " + "<" + objProperty.PropertyType + "> " + objProperty.Name+"="; if (objProperty != null) { object value = valueObject .GetType() .InvokeMember(objProperty.Name, BindingFlags.GetProperty, null, valueObject, null); buffy.Append(nvp+value.ToString()+" "); } else { buffy.Append(nvp+"<null> "); } } foreach(FieldInfo objField in valueObject.GetType().GetFields()) { string nvp; nvp = " <<Field>> " + "<" + objField.FieldType + "> " + objField.Name +"="; if (objField != null) { object value = valueObject.GetType().InvokeMember(objField.Name, BindingFlags.GetField, null, valueObject, null); buffy.Append(nvp+value.ToString()+" "); } else { buffy.Append(nvp+"<null> "); } } // ----------- End --------- buffy.Append("]"); return buffy.ToString(); } } }