http://stackoverflow.com/questions/9210428/how-to-convert-class-into-dictionarystring-string
someObject.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.ToDictionary(prop => prop.Name, prop => prop.GetValue(someObject, null))
public static class ObjectExtensions
{
public static T ToObject(this IDictionary source)
where T : class, new()
{
T someObject = new T();
Type someObjectType = someObject.GetType();
foreach (KeyValuePair item in source)
{
someObjectType.GetProperty(item.Key).SetValue(someObject, item.Value, null);
}
return someObject;
}
public static IDictionary AsDictionary(this object source, BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance)
{
return source.GetType().GetProperties(bindingAttr).ToDictionary
(
propInfo => propInfo.Name,
propInfo => propInfo.GetValue(source, null)
);
}
}
class A
{
public string Prop1
{
get;
set;
}
public int Prop2
{
get;
set;
}
}
class Program
{
static void Main(string[] args)
{
Dictionary dictionary = new Dictionary();
dictionary.Add("Prop1", "hello world!");
dictionary.Add("Prop2", 3893);
A someObject = dictionary.ToObject();
IDictionary objectBackToDictionary = someObject.AsDictionary();
}
}
http://stackoverflow.com/questions/2051834/exclude-property-from-gettype-getproperties
public class SkipPropertyAttribute : Attribute
{
}
public static class TypeExtensions
{
public static PropertyInfo[] GetFilteredProperties(this Type type)
{
return type.GetProperties().Where(pi => pi.GetCustomAttributes(typeof(SkipPropertyAttribute), true).Length == 0).ToArray();
}
}
public class Test
{
public string One { get; set; }
[SkipProperty]
public string Two { get; set; }
}
class Program
{
static void Main(string[] args)
{
var t = new Test();
Type ty = t.GetType();
PropertyInfo[] pinfo = ty.GetFilteredProperties();
foreach (PropertyInfo p in pinfo)
{
Console.WriteLine(p.Name);
}
Console.ReadKey();
}
}
http://stackoverflow.com/questions/4951233/compare-two-objects-and-find-the-differences
static class extentions
{
public static List DetailedCompare(this T val1, T val2)
{
List variances = new List();
FieldInfo[] fi = val1.GetType().GetFields();
foreach (FieldInfo f in fi)
{
Variance v = new Variance();
v.Prop = f.Name;
v.valA = f.GetValue(val1);
v.valB = f.GetValue(val2);
if (!v.valA.Equals(v.valB))
variances.Add(v);
}
return variances;
}
}
class Variance
{
public string Prop { get; set; }
public object valA { get; set; }
public object valB { get; set; }
}