using System.Collections.Generic;
public static void Main()
var bcp = new BindingControlProperty
var bindingDictionary = bcp.AsDictionary();
PrintDictionary(bindingDictionary);
var demo = Demo.Create("DictionaryExtensions", 1, "NeemakSoft", DateTime.Now);
PrintDictionary(demo.AsDictionary());
var guid = new Guid("2335aef0-af75-4ead-a765-b45d5cf0b6d4");
var dicDemo = new Dictionary<string, object>
{"ProductName","ExtensionsPack"},
{"ReleaseDate", DateTime.Now},
{"PublisherName","NeemakSoft"}
var extensionPackInfo = dicDemo.ToObject<Demo>();
Console.WriteLine("Validating Object Info: ");
Console.WriteLine("Object Assembly: {0}", extensionPackInfo.Assembly);
Console.WriteLine("Assigned Guid: {0}", guid);
var condition = extensionPackInfo.Assembly != guid;
System.Diagnostics.Debug.Assert(condition, "Both, guid and assembly aren't equals", "Unwrapping dictionary into object typeof Demo failed");
private static void PrintDictionary(IDictionary<string, object> dic)
foreach(var entry in dic)
System.Console.WriteLine("{0} => {1}", entry.Key, entry.Value);
System.Console.WriteLine("---");
public class BindingControlProperty
public string ControlName { get; set; }
public string PropertyName { get; set; }
public string FieldName { get; set; }
public string ProductName {get;set;}
public Guid Assembly {get;set;}
public DateTime ReleaseDate {get;set;}
public int PublisherId {get;set;}
public string PublisherName {get;set;}
private Demo(string productName, int publisherId, string publisherName, DateTime releaseDate)
Assembly = Guid.NewGuid();
ProductName = productName;
ReleaseDate = releaseDate;
PublisherId = publisherId;
PublisherName = publisherName;
public static Demo Create(string productName, int publisherId, string publisherName, DateTime releaseDate)
return new Demo(productName, publisherId, publisherName, releaseDate);
public static class DictionaryExtensions
public static T ToObject<T>(this Dictionary<string, object> dictionary)
var type = instance.GetType();
foreach (var i in dictionary) type.GetProperty(i.Key).SetValue(instance, i.Value);
public static IDictionary<string, object> AsDictionary<T>(this T model, BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance)
.ToDictionary(p => p.Name, p => p.GetValue(model, null));