<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Shahed Khan (MVP C#)</title><subtitle type="html">&lt;/br&gt;
&lt;a href="http://www.geekswithblogs.net"&gt;&lt;img src="http://www.msbdusers.net/smartmassemail/sk.jpg" border="0" /&gt;&lt;/a&gt;</subtitle><id>http://dotnetusergroup.com/blogs/shahedkhan/atom.aspx</id><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dotnetusergroup.com/blogs/shahedkhan/atom.aspx" /><generator uri="http://communityserver.org" version="2.0.60217.2664">Community Server</generator><updated>2008-02-22T01:37:00Z</updated><entry><title>Reflection Tips: Generate Mock objects for Test Cases.</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/08/06/1423.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/08/06/1423.aspx</id><published>2008-08-06T12:26:08Z</published><updated>2008-08-06T12:26:08Z</updated><content type="html">&lt;p&gt;Filling up Mock objects with random data is possibly one of the most time consuming and boring chapter of writing test cases. Let say we have the following classes and we want to write some mock objects.&lt;/p&gt; &lt;p&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed.ReflectionTipsGenerateMockobjectsforTes_5F00_12585/SmartDataManagement-_2D00_-Microsoft-Visual-Studio_5F00_thumb.png"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Mock Object Code Example&lt;/strong&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private Client GetMockClient() &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Client Client1 = new Client(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Client1.FirstName = "Random String 6dc22d70-ad0c-4552-9c86-2925e723a326"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Client1.LastName = "Random String 3e08dc98-495a-4a70-bff4-b7b21489b0d0"; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClientAddress ClientAddress2 = new ClientAddress(); &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress ContactAddress3 = new ContactAddress(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress3.Address = "Random String e5957034-893b-4d2c-a29a-5b23e2561c00"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress3.Phone = "Random String 8d034e87-ece3-42b8-ae97-35fad1639f41"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress3.Mobile = "Random String 73a6abad-3268-4ae4-b01c-1732ab0f5f52"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClientAddress2.HomeAddress = ContactAddress3; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress ContactAddress4 = new ContactAddress(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress4.Address = "Random String 117ef00d-f29d-4697-97ae-123a6b56da4f"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress4.Phone = "Random String 8e4d0bbe-f470-4438-8940-06d9889e3943"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress4.Mobile = "Random String 6f0cba5c-5a88-4e5b-88ae-32a569cffa41"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClientAddress2.ShippingAddress = ContactAddress4; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Client1.ClientAddress = ClientAddress2; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Misc Misc5 = new Misc(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Misc5.OrderDate = DateTime.Now; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Misc5.Quaitity = 945515547; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Misc5.DeliveryDate = DateTime.Now; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Customer Customer6 = new Customer(); &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomerDemographics CustomerDemographics7 = new CustomerDemographics(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomerDemographics7.FirstName = "Random String 9b9542e6-2eb9-4ac8-bbd9-46272c8531b4"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomerDemographics7.LastName = "Random String 275ca427-9373-41a7-8249-9a3fd94631bd"; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress ContactAddress8 = new ContactAddress(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress8.Address = "Random String c9d18341-cb7e-4086-ba09-76fd7eb09f71"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress8.Phone = "Random String d88849f2-f443-46b1-9d21-3eaed1739696"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress8.Mobile = "Random String 984cfe2b-c35e-46f4-8eb1-27342d3e21b2"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomerDemographics7.HomeAddress = ContactAddress8; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress ContactAddress9 = new ContactAddress(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress9.Address = "Random String e67ae73f-8edd-47d1-add0-b1e84ddb6b05"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress9.Phone = "Random String 91b8d44e-3718-4cc7-be8a-194d308b8969"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ContactAddress9.Mobile = "Random String a0d19e07-2b80-4f7a-acd2-7a507455c000"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CustomerDemographics7.ShippingAddress = ContactAddress9; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Customer6.CustomerDemographics = CustomerDemographics7; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Misc5.AlternativeCustomer1 = Customer6; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Client1.Misc = Misc5; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Client1; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p&gt;&lt;br&gt;As you can see we will need to spare significant amount of time to prepare a Mock object for "Client" class. But you will be happy to know that I did not write a single line of the code that I pasted above. Yes, I generated it using Reflection. Let me share that magical piece of code with you which can save you a heaps of time.&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Mock Helper&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MockHelper&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public MockHelper()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.MaxDepth = 100;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int index = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dictionary&amp;lt;string, string&amp;gt; keys = new Dictionary&amp;lt;string, string&amp;gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;string&amp;gt; assemblyList = new List&amp;lt;string&amp;gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder codeBuilder = null;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int MaxIndexValue { get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Generate(object obj)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Assembly List that we are interested in for recursive calls, add according to your need.&lt;/strong&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assemblyList.Add("SmartDataManagement.Blog");  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeBuilder = new StringBuilder();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GenerateCode(obj, string.Empty);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return codeBuilder.ToString();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void GenerateCode(object obj, string theKey)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string instanceName = string.Format("{0}{1}", obj.GetType().Name, index);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeBuilder.AppendLine(String.Format("{0} {1} = new {0}();", obj.GetType().Name, instanceName));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keys.Add(theKey, instanceName);&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Iterate through the list of Public Properties of the object instance&lt;/strong&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (System.Reflection.PropertyInfo property in obj.GetType().GetProperties())&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Decide to dig deeper, if a PropertyType belongs to the assemblies that we are interested in, we go deep.&lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (GoDeeper(property))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index = index + 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;//Avoid infinite Loop situation&lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (index &amp;lt; this.MaxIndexValue)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object propertyInstance = property.GetValue(obj, null);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (propertyInstance == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Dynamically create Property Instance&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propertyInstance = Activator.CreateInstance(property.PropertyType);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (property.CanWrite)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property.SetValue(obj, propertyInstance, null);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string key = Guid.NewGuid().ToString();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeBuilder.AppendLine();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Recursive call&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GenerateCode(propertyInstance, key);  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeBuilder.AppendLine(String.Format(@"{0}.{1} = {2};", instanceName, property.Name, keys[key]));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeBuilder.AppendLine();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (property.PropertyType == typeof(string))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeBuilder.AppendLine(String.Format(@"{0}.{1} = ""{2}"";", instanceName, property.Name, GetRandomString()));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (property.PropertyType == typeof(DateTime))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeBuilder.AppendLine(String.Format(@"{0}.{1} = DateTime.Now;", instanceName, property.Name));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (property.PropertyType == typeof(int))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeBuilder.AppendLine(String.Format(@"{0}.{1} = {2};", instanceName, property.Name, GetRandomInt()));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool GoDeeper(PropertyInfo property)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Dig deeper for interested Assemblies only, Please feel free to extend and put complex logics to serve your purpose.&lt;/strong&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (string assemblyName in assemblyList)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (property.PropertyType.Assembly.FullName.Contains(assemblyName))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string GetRandomString()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return String.Format("Random String {0}", Guid.NewGuid().ToString());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int GetRandomInt()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] buffer = Guid.NewGuid().ToByteArray();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return BitConverter.ToInt32(buffer, 0);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;The above code is self explanatory, I also commented to give an idea of how this is working, In short, I take an instance of the desired class, iterate through all of its Properties using Reflection and generate desired piece of code. While iterating, I also create property instance&amp;nbsp; as required and loop thorough the properties of the child in a recursive manner until all of them are served. The assemblyList object maintains the list of the assemblies that we are interested in for recursion.&amp;nbsp; &lt;strong&gt;Its worth mentioning the above piece of code has limitations, it will not work in the cases where there are circular references of Types for properties&lt;/strong&gt;, that is why I kept a check for MaxIndexValue to break the infinite loop scenario. &lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed.ReflectionTipsGenerateMockobjectsforTes_5F00_12585/SmartDataManagement-_2D00_-Microsoft-Visual-Studio-_2800_2_29005F00_thumb.png"&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;Fig, shows an example of circular references of Types, here Client has Misc property (of Type: Misc), and Misc has AlternativeClient1 property (of Type: Client). &lt;br&gt;&lt;br&gt;The MockHelper has very simple logic to decide to create dynamic instances and to do recursive calls, it will get stuck within Client and Misc for this example. We can definitely overcome this by putting more complex logics and checks. I wanted to keep it simple and moreover it serves my purpose. Also here I cater with int, string and DateTime only, please feel free to extend to serve your purpose. You will notice I used StringBuilder above to accumulate the generated codes, but I normally use my &lt;a href="http://www.codeplex.com/smartcodegenerator"&gt;SmartCodeGenerator&lt;/a&gt; and write simple templates for this kind of tricks, &lt;a href="http://www.codeplex.com/smartcodegenerator"&gt;SmartCodeGenerator&lt;/a&gt; provides a lot more flexibility and comes with robust templating feature for purposes like this.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MockHelper helper = new MockHelper();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Your desired class instance &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Client client = new Client();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string code = helper.Generate(client);  &lt;p&gt;Its quite simple to use the above helper, just create an instance of the MockHelper, then pass an instance of your desired class, it will return you the mock object code as we have seen above. Infact, the above piece of code can speed you up for any cases where you need to create instances of a class and need to write code to fill all its properties, moreover the generated code can also reduce chances of errors and typos that normally happens when we do it manually.&lt;br&gt;&lt;br&gt;Thank you for being with me so far, hope this saves you some time, Happy coding :)  &lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=1423" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>C# Reflection Tips: Data transformation using Reflection</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/07/24/1412.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/07/24/1412.aspx</id><published>2008-07-24T18:18:19Z</published><updated>2008-07-24T18:18:19Z</updated><content type="html">&lt;p&gt;.NET Reflection can be quite handy to transform one object to another, and specially when the target data structure varies a lot. Lets say, a "source party" has a stable Source data structure. But different clients have different requirement and expects to served with data in different format. These clients may pass their object instances in their own format and expect to be served with data in their structure. Let me make up an Example here: &lt;br&gt;&lt;br&gt;&lt;strong&gt;Source Data Structure which is consistent and never changes.&lt;/strong&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed/SmartDataManagement-_2D00_-Microsoft-Visual-Studio_5F00_thumb.png"&gt;&lt;br&gt; ( &lt;a title="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed/SmartDataManagement-_2D00_-Microsoft-Visual-Studio_5F00_2.png" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed/SmartDataManagement-_2D00_-Microsoft-Visual-Studio_5F00_2.png"&gt;http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed/SmartDataManagement-_2D00_-Microsoft-Visual-Studio_5F00_2.png&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Client 1 wants data to be transformed/served in the following structure&lt;/strong&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/shahed/WindowsLiveWriter/CReflectionTipsDatatransformationusingRe_2990/Customer_4.png"&gt; &lt;br&gt;&lt;strong&gt;Client 2 wants data to be transformed/served in the following structure&lt;/strong&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/shahed/WindowsLiveWriter/CReflectionTipsDatatransformationusingRe_2990/Client_thumb.png"&gt; &lt;br&gt;and there may be other N-number of clients with N-number of structures, on which "Source Party" has no control. &lt;/p&gt; &lt;p&gt;&lt;br&gt;The use of .NET Attribute and .NET Reflection can produce a very powerful solution to address this kind of scenario. So instead of writing different transforms for different clients, "source party" can simply ask clients to mark their class properties with custom attributes that the "source party" can understand. When clients mark their classes with custom attributes the&amp;nbsp; "source party" can easily take advantage of .NET Reflection to analyze those objects runtime and can act accordingly. &lt;br&gt;&lt;br&gt;A .NET Attribute class can be designed to keep track of of the Mapping between the source and target data structure. &lt;br&gt;&lt;br&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/shahed/WindowsLiveWriter/CReflectionTipsDatatransformationusingRe_2990/attribute_thumb.png"&gt; &lt;/p&gt; &lt;p&gt;The client can mark their class/properties with this custom attribute for the (target -&amp;gt; source) mapping. &lt;br&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/shahed/WindowsLiveWriter/CReflectionTipsDatatransformationusingRe_2990/attributeMapping_thumb.png"&gt; &lt;/p&gt; &lt;p&gt;As the mapping has been performed, we can take advantage of .NET Reflection to transform/serve data in different structure ( infact any structure - considering mapping is done properly ). Lets look at the following &lt;strong&gt;magical&lt;/strong&gt; piece of code. &lt;br&gt;&lt;/p&gt; &lt;p&gt;public class TransformHelper &lt;br&gt;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Source SourceObject { get; set; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object GetTransformedObjectObject(object obj) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (PropertyInfo property in obj.GetType().GetProperties()) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FillObject(property, obj); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return obj; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void FillObject(PropertyInfo property, object obj) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Identify Custom attribute &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SourceMapAttribute attribute = (SourceMapAttribute)Attribute.GetCustomAttribute(property, typeof(SourceMapAttribute)); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (attribute != null) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Check propertyName &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;/*Put your desired code and logic here.*/ &lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (attribute.PropertyName != string.Empty) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Put your desired code and logic here. &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I have simply demonstrated with one attribute property, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; you can have as many as you like, and can perform any complex operation you prefer.*/ &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Get Source Object Value &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object sourceValue = GetSourceValue(attribute.PropertyName); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (property.CanWrite) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Assign source value to the mapped property &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property.SetValue(obj, sourceValue, null); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type propertyType = property.PropertyType; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object propertyInstance = property.GetValue(obj, null); &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (propertyInstance == null) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Instantiate when Property is not instantiated &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propertyInstance = Activator.CreateInstance(property.PropertyType); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (property.CanWrite) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property.SetValue(obj, propertyInstance, null); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (PropertyInfo info in propertyType.GetProperties()) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;//recursive call &lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FillObject(info, propertyInstance); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private object GetSourceValue(string propertyName) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SourceObject == null) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SourceDataProvider provider = new SourceDataProvider(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.SourceObject = provider.GetSource(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (propertyName) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "FirstName": &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return SourceObject.FirstName; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "LastName": &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return SourceObject.LastName; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "ContactAddress": &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.SourceObject.ContactAddress; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "ContactPhone": &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.SourceObject.ContactPhone; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "ContactMobile": &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.SourceObject.ContactMobile; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "ShippingAddress": &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.SourceObject.ShippingAddress; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "ShippingPhone": &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.SourceObject.ShippingPhone; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "ShippingMobile": &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.SourceObject.ShippingMobile; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default: &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return string.Empty; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;} &lt;/p&gt; &lt;p&gt;Its worth talking a little bit about the above code snippet, all it does is takes an instance of the target class, uses reflection to loop through all its properties, while doing that identifies the custom attributes, checks for the mapping property and assigns values from the Source. This also creates property instances as required and recursively keeps working until all the properties ( including all descendents ) are checked and served. &lt;br&gt;&lt;br&gt;Lets look at this Transformer in action. &lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Serve Client 1&lt;/strong&gt;: &lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/shahed/WindowsLiveWriter/CReflectionTipsDatatransformationusingRe_2990/Client1_thumb.png"&gt;  &lt;/p&gt; &lt;p&gt;Here is what we see after transformation. &lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;img src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed/serveclient-1_5F00_thumb.png"&gt;  &lt;br&gt;&lt;br&gt;(&lt;a title="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed/serveclient-1_5F00_2.png" href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed/serveclient-1_5F00_2.png"&gt;http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shahed/serveclient-1_5F00_2.png&lt;/a&gt;)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Serve Client 2&lt;/strong&gt;: &lt;br&gt;&lt;br&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/shahed/WindowsLiveWriter/CReflectionTipsDatatransformationusingRe_2990/client2_thumb.png"&gt; &lt;br&gt;and here is the result. &lt;br&gt;&lt;br&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/shahed/WindowsLiveWriter/CReflectionTipsDatatransformationusingRe_2990/serveclient2_thumb.png"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;br&gt;In this way we can serve any clients objects in any structure ( considering, mapping is done properly ). You will sure agree with me Transforming one object to another by taking advantage of .NET Attribute and .NET Reflection is quite cool. Thank you for being with me so far, Happy coding :) &lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=1412" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>ASP.NET tips: Golden rules for Dynamic Controls.</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/07/24/1411.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/07/24/1411.aspx</id><published>2008-07-24T18:05:51Z</published><updated>2008-07-24T18:05:51Z</updated><content type="html">&lt;p&gt;1. Make sure your dynamic controls are Loaded on every postback. &lt;br&gt;&lt;br&gt;Lets play with a very simple example, &lt;br&gt;&lt;br&gt;ASPX &lt;br&gt;&lt;/p&gt; &lt;p&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %&amp;gt; &lt;/p&gt; &lt;p&gt;&amp;lt;body&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form id="form1" runat="server"&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:PlaceHolder ID="PlaceHolder1" runat="server"&amp;gt;&amp;lt;/asp:PlaceHolder&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:Button ID="Button1" runat="server" Text="Button" /&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt; &lt;br&gt;&amp;lt;/body&amp;gt; &lt;br&gt;&amp;lt;/html&amp;gt; &lt;/p&gt; &lt;p&gt;&lt;br&gt;C# Code Behind &lt;br&gt;&lt;/p&gt; &lt;p&gt;public partial class _Default : System.Web.UI.Page &lt;br&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox t = new TextBox(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.ID = "textBox"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.PlaceHolder1.Controls.Add(t);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;} &lt;br&gt;&lt;br&gt;The above code works fine, but a common mistake is to try to conditionally load dynamic controls, if we tweak the code a little bit you will notice we loose our TextBox after any postback. The following code will not load the TextBox after our first postback. &lt;br&gt;&lt;br&gt;public partial class _Default : System.Web.UI.Page &lt;br&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;if (!IsPostBack) &lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox t = new TextBox(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.ID = "textBox"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.PlaceHolder1.Controls.Add(t); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;} &lt;/p&gt; &lt;p&gt;Its recommended to load the dynamic controls during the Page_Init instead, because we may want to hook up our events with proper handler at an early stage. &lt;br&gt;&lt;/p&gt; &lt;p&gt;public partial class _Default : System.Web.UI.Page &lt;br&gt;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;protected void Page_Init(object sender, EventArgs e) &lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox t = new TextBox(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.ID = "textBox"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.TextChanged+=new EventHandler(t_TextChanged); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.PlaceHolder1.Controls.Add(t); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;} &lt;/p&gt; &lt;p&gt;&lt;br&gt;2. Do not assigning properties of a dynamic control (viewstate enabled), during Page_Init, it will not be reflected. &lt;br&gt;&lt;br&gt;Here is scenario of another common mistake, "123" assigned to the Text property during Page_Init, &lt;br&gt;&lt;/p&gt; &lt;p&gt;public partial class _Default : System.Web.UI.Page &lt;br&gt;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Init(object sender, EventArgs e) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox t = new TextBox(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.ID = "textBox"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;t.Text = "123"; &lt;br&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.PlaceHolder1.Controls.Add(t); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;} &lt;/p&gt; &lt;p&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/shahed/WindowsLiveWriter/ASP.NETtipsGoldenrulesforDynamicControl_14FD2/controllifecycle_thumb.png"&gt; &lt;/p&gt; &lt;p&gt;the above code will not work because, Initialization happens before LoadViewState during the control lifecycle. The value assigned to the properties during Initialization will simply get overwritten by the ViewState values.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;3. If you are expecting your ViewState to retain after the postback, always assign same ID to the dynamic control &lt;br&gt;&lt;/p&gt; &lt;p&gt;The following piece of code will not work, as I am assigning a new ID to the dynamic control after each postback. The LoadViewState retrieves previously saved viewstate data using the control ID, as the control ID has changed, it doesn't know anymore what to load, as a result it cannot load previously saved viewstate data any more.&lt;/p&gt; &lt;p&gt;public partial class _Default : System.Web.UI.Page &lt;br&gt;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Init(object sender, EventArgs e) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox t = new TextBox(); &lt;br&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.ID = Guid.NewGuid().ToString(); &lt;/strong&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.form1.Controls.Add(t);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;} &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Thank you for being with me so far. &lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=1411" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>ASP.NET tips, Making Custom Validators work in Partial Rendering mode.</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/06/17/1349.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/06/17/1349.aspx</id><published>2008-06-17T17:43:56Z</published><updated>2008-06-17T17:43:56Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Introduction&lt;br&gt;&lt;/strong&gt;&lt;br&gt;There are many situations where we need to identify if partial rendering is supported in a page, especially when a control uses javascript, to get the control work in partial rendering mode, the script needs to be registered using a ScriptManager Type instead. A classic example will be Validators.&lt;br&gt;&lt;br&gt;The ASP.NET Page class exposes the Validators property, which is a list of all the IValidator types on the page. A page keeps track of its validators, and registers a javascript array of validators automatically to the page. Example, When we add 3 RequiredFieldValidator in a page the following javascript Array will be automatically generated and added in our page automatically during the page load. &lt;br&gt;&lt;br&gt;Page_Validators = new Array(document.getElementById("RequiredFieldValidator1"), &lt;br&gt;document.getElementById("RequiredFieldValidator2"), &lt;br&gt;document.getElementById("RequiredFieldValidator3"));&lt;br&gt;&lt;br&gt;The ASP.NET Page also registers couple of other script which eventually hooks up different events ( onclick, onkeypress, onchange, onblur ) to the the target control (ControlToValidate), to some predefined javascript functions that resides in WebUIValidation.js file. So when we add a validator in our Page we also notice the following script is automatically added. [WebUIValidation.js ships with ASP.NET and resides in the following folder "/aspnet_client/system_web/&amp;lt;version&amp;gt;/WebUIValidation.js".]&lt;br&gt;&lt;/p&gt; &lt;p&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br&gt;&amp;lt;!--&lt;br&gt;var Page_ValidationActive = false;&lt;br&gt;if (typeof(ValidatorOnLoad) == "function") {&lt;br&gt;ValidatorOnLoad();&lt;br&gt;}  &lt;p&gt;function ValidatorOnSubmit() {&lt;br&gt;if (Page_ValidationActive) {&lt;br&gt;return ValidatorCommonOnSubmit();&lt;br&gt;}&lt;br&gt;else {&lt;br&gt;return true;&lt;br&gt;}&lt;br&gt;}&lt;br&gt;// --&amp;gt;&lt;br&gt;&amp;lt;/script&amp;gt;  &lt;p&gt;ValidatorOnLoad plays the big role of hooking up the the events mentioned above, and here is a code snippet from this function,&lt;/p&gt; &lt;p&gt;for (i = 0; i &amp;lt; Page_Validators.length; i++) {&lt;br&gt;val = Page_Validators&lt;img src="/emoticons/emotion-55.gif" alt="Idea" /&gt;;&lt;br&gt;if (typeof(val.evaluationfunction) == "string") {&lt;br&gt;eval("val.evaluationfunction = " + val.evaluationfunction + ";");&lt;br&gt;}&lt;br&gt;...  &lt;p&gt;if (typeof(val.controltovalidate) == "string") {&lt;br&gt;ValidatorHookupControlID(val.controltovalidate, val);&lt;br&gt;}&lt;br&gt;...&lt;br&gt;}&lt;br&gt;&lt;br&gt;keen eyes may have already noticed the val.evaluationfunction property, yes every validators needs to have this property for it to work properly under the ASP.NET validation framework. Custom validators takes advantage of this property to point to custom js functions. Custom validator developers normally use RegisterExpandoAttribute method to register this attribute.&lt;br&gt;&lt;br&gt;protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; base.AddAttributesToRender(writer);&lt;br&gt;&amp;nbsp;&amp;nbsp; if (this.RenderUplevel)&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string clientID = this.ClientID;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Page.ClientScript.RegisterExpandoAttribute(clientID, "evaluationfunction", "EntryValidatorEvaluateIsValid");&lt;br&gt;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;br&gt;When I used Update Panel with partial rendering enabled the Page.ClientScript.RegisterExpandoAttribute did not work for me. My validators always stopped working after the first postback, which was performed via partial rendering and triggering. I found the "evaluationfunction" in the javascript to be undefined.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br&gt;I started looking under the hood, and soon discovered, that the ASP.NET Validators that ships out of the box, ( eg. RangeValidator, RequiredFieldValidator ) uses a different internal method "AddExpandoAttribute" to register the property. Here is a code snippet from the RangeValidator.&lt;br&gt; &lt;p&gt;protected override void AddAttributesToRender(HtmlTextWriter writer)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.AddAttributesToRender(writer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (base.RenderUplevel)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string clientID = this.ClientID;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HtmlTextWriter writer2 = base.EnableLegacyRendering ? writer : null;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.AddExpandoAttribute(writer2, clientID, "evaluationfunction", "RangeValidatorEvaluateIsValid", false);&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;and code snippet from BaseValidator, the internal method AddExpandoAttribute.  &lt;p&gt;internal void AddExpandoAttribute(HtmlTextWriter writer, string controlId, string attributeName, string attributeValue, bool encode)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddExpandoAttribute(this, writer, controlId, attributeName, attributeValue, encode);&lt;br&gt;}  &lt;p&gt;After digging further I realized, AddExpandoAttribute checks the ASP.Page whether partial rendering is supported, then it registers the attribute using ScriptManager instead. I did the same with my validation control and it works for me. Here is the piece of code that solved my problem.&lt;br&gt;&lt;/p&gt; &lt;p&gt;protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.AddAttributesToRender(writer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.RenderUplevel)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string clientID = this.ClientID;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!this.IsPartialRenderingSupported)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Page.ClientScript.RegisterExpandoAttribute(clientID, "evaluationfunction", "EntryValidatorEvaluateIsValid");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type scriptManagerType = BuildManager.GetType("System.Web.UI.ScriptManager", false);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scriptManagerType.InvokeMember("RegisterExpandoAttribute", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new object[] { this, clientID, "evaluationfunction", "QuantityEntryValidatorEvaluateIsValid", false });&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;Note, the I am first checking whether Partial Rendering is Supported and using the ScriptManager&amp;nbsp; Type to register the property instead.&lt;br&gt;&lt;br&gt;The following piece of code uses Reflection to figure out whether partial rendering is supported. &lt;br&gt; &lt;p&gt;internal bool IsPartialRenderingSupported&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!this.PartialRenderingChecked)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type scriptManagerType = BuildManager.GetType("System.Web.UI.ScriptManager", false);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (scriptManagerType != null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object obj2 = this.Page.Items[scriptManagerType];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (obj2 != null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PropertyInfo property = scriptManagerType.GetProperty("SupportsPartialRendering");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (property != null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object obj3 = property.GetValue(obj2, null);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.IsPartialRenderingEnabled = (bool)obj3;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.PartialRenderingChecked = true;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.IsPartialRenderingEnabled;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;}&amp;nbsp; &lt;p&gt;private bool PartialRenderingChecked&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object val = ViewState["PartialRenderingChecked"];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (val != null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (bool)val;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewState["PartialRenderingChecked"] = value;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}  &lt;p&gt;private bool IsPartialRenderingEnabled&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object val = ViewState["IsPartialRenderingEnabled"];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (val != null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (bool)val;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewState["IsPartialRenderingEnabled"] = value;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;  &lt;p&gt;The Page.ClientScript.RegisterExpandoAttribute may not work in Partial Rendiring mode, when a postback is performed via triggering, &lt;br&gt;to get this work we need to determine whether partial rendering is supported and use the ScriptManager Type instead like described above. &lt;br&gt;&lt;br&gt;Hope this helps, and saves some of your time, Thank you for being with me so far.&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=1349" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>C# 3.0 tips, Automatic Property</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/06/11/1234.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/06/11/1234.aspx</id><published>2008-06-11T12:21:14Z</published><updated>2008-06-11T12:21:14Z</updated><content type="html">&lt;p&gt;Declaring a property in C# 3.0 is super easy and super short.&lt;br&gt;&lt;br&gt;public class Student&lt;br&gt;{&lt;br&gt;&amp;nbsp; public string Name {&amp;nbsp; get; set; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;yes that's it, the framework will take care of the rest, the private variables will be automatically created and the getter and setter will be automatically implemented.&lt;br&gt;&lt;br&gt;Here is how we can assign value to an automatic property via the constructor&lt;br&gt;&lt;br&gt;public class Student&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Name {&amp;nbsp; get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Student (string name)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Name = name;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br&gt;}&lt;br&gt;&lt;br&gt;And finally, here is how we can declare a Readonly property&lt;br&gt;&lt;br&gt;public class Student&lt;br&gt;{&amp;nbsp; &lt;/p&gt;&amp;nbsp;&amp;nbsp; public string Name {&amp;nbsp; get; private set; }&amp;nbsp;&amp;nbsp; &lt;p&gt;&amp;nbsp;&amp;nbsp; public Student (string name)&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Name = name;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br&gt;}&lt;br&gt;&lt;br&gt;Hope this helps, Enjoy coding.&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=1234" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>System.Net.WebClient().DownloadString(url) for Web Scrapeing</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/06/10/1219.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/06/10/1219.aspx</id><published>2008-06-10T03:25:42Z</published><updated>2008-06-10T03:25:42Z</updated><content type="html">&lt;p&gt;WebRequest is the abstract base class for the .NET Framework's request/response model for accessing data from the Internet. &lt;p&gt;To get content of a website, in .NET 1.0. we used to use WebRequest, which is good and also works asynchronously.  &lt;p&gt;public static string GetContent(string url)&lt;br&gt;{&lt;br&gt; System.Net.WebRequest request = System.Net.WebRequest.Create(url);&lt;br&gt; using (System.Net.WebResponse response = request.GetResponse())&lt;br&gt; {&lt;br&gt;&amp;nbsp; using (System.IO.StreamReader reader =new System.IO.StreamReader(response.GetResponseStream()))&lt;br&gt;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp; return reader.ReadToEnd();&lt;br&gt;&amp;nbsp; }&lt;br&gt; }&lt;br&gt;}&lt;br&gt; &lt;p&gt;But in .NET 2.0, we can also use the WebClient class. It can also work asynchronous and works the same as the other one. &lt;p&gt;public static string GetContent(string url)&lt;br&gt;{&lt;br&gt; using (System.Net.WebClient client =new System.Net.WebClient())&lt;br&gt; {&lt;br&gt;&amp;nbsp; return client.DownloadString(url);&lt;br&gt; }&lt;br&gt;}&lt;br&gt; &lt;p&gt;We can use any of the above method for web scrapeing in .NET. But the second approach is probably more cleaner.&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=1219" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>Project SOAK winner of 2008 Imagine Cup Australia.</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/970.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/970.aspx</id><published>2008-05-24T13:08:53Z</published><updated>2008-05-24T13:08:53Z</updated><content type="html">&lt;p&gt;The theme of this year’s &lt;a href="http://www.imaginecup.com"&gt;Imagine Cup&lt;/a&gt; is "&lt;strong&gt;Imagine a world where technology enables a sustainable environment&lt;/strong&gt;." It had been a great honorary for me to take part as one the Judges of the 2008 Imagine Cup Australia. All the teams worked real hard and came up with breathtaking solutions. The interesting part was&amp;nbsp; solutions were built on top of cutting edge technologies technologies ie. Silverlight, Virtual Earth, LINQ, ASP.NET 3.5, WCF, .NET 3.5 and SQL2005. &lt;br&gt;&lt;/p&gt; &lt;p&gt;The Project SOAK is announced the winner of Australian Imagine Cup 08. SOAK which stands for “Smart Operational Agriculture toolKit” is an integrated hardware and softwares platform that aims to help farmers make the most of the water (and other) resources on their land. It does this through an integration of a wide range of sensors which gathers data about the environment in real time, provide rich visual information to end-user about the status of the farm, and electronically controls various systems such as sprinklers. The team members of SOAK blogged more about the project, can be found here &lt;br&gt;&lt;br&gt;&lt;a title="http://davidburela.wordpress.com/2008/05/22/2008-imagine-cup-australian-winner-project-soak/" href="http://davidburela.wordpress.com/2008/05/22/2008-imagine-cup-australian-winner-project-soak/"&gt;http://davidburela.wordpress.com/2008/05/22/2008-imagine-cup-australian-winner-project-soak/&lt;/a&gt; &lt;br&gt;&lt;br&gt;&lt;a title="http://www.istartedsomething.com/20080523/imagine-cup-australian-winner-project-soak/" href="http://www.istartedsomething.com/20080523/imagine-cup-australian-winner-project-soak/"&gt;http://www.istartedsomething.com/20080523/imagine-cup-australian-winner-project-soak/&lt;/a&gt; &lt;br&gt;&lt;br&gt;&lt;a href="http://apcmag.com/imagine_cups_surprise_winners_a_boon_for_farmers.htm"&gt;Australian PC Magazine has just published&lt;/a&gt; published a very insightful story on this project and the competition &lt;br&gt;&lt;br&gt;&lt;img src="http://apcmag.com/images/apcapc/news/imcup_map_625.jpg"&gt; &lt;/p&gt; &lt;p&gt;I found SOAK to be a brilliant piece of work, where the team combined latest technologies together and came up with a environment friendly cost effective solution. &lt;br&gt;&lt;br&gt;The winning team will now represent Australia at the World Imagine Cup finals in Paris in July. &lt;br&gt;&lt;br&gt;&lt;img src="http://apcmag.com/images/apcapc/news/imcup_team625.jpg"&gt;&amp;nbsp; &lt;br&gt;&lt;strong&gt;&lt;br&gt;Imagine Cup 2008 - Australia - Judging Panel &lt;br&gt;&lt;/strong&gt;&lt;br&gt;&lt;img src="http://apcmag.com/images/apcapc/news/imcup_judges_625.jpg"&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The Imagine Cup’s judging panel consisted of Roger Lawrence, Microsoft Australia’s Manager Developer Evangelism; Nigel Watson, Microsoft Australia Architect Evangelist; Shekhar Kalra, computer science lecturer at RMIT University; Shahed Khan, Senior Software Engineer at Ocean Informatics MVP C#.NET, and APC, represented by its editor, Tony Sarno. &lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=970" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>ASP.NET Bug, Multi View control do not save ViewState, of dynamically added controls</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/969.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/969.aspx</id><published>2008-05-24T13:07:47Z</published><updated>2008-05-24T13:07:47Z</updated><content type="html">&lt;p&gt;Couple of days back me and my colleague, we discovered an issue with the ASP.NET Multi View Control. &lt;br&gt;We were surprised&amp;nbsp; to see that it do not add ViewState, of the dynamically added controls, of the Inactive Tabs. &lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ASP.NET 2.0 &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:MultiView ID="MultiView1" runat="server" EnableViewState="true"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/asp:MultiView&amp;gt; &lt;br&gt;&lt;br&gt;&lt;strong&gt;C# Code Behind&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!IsPostBack) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int index = 1; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (View v in MultiView1.Views) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox t = new TextBox(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.ID = index.ToString(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.Text = "&lt;strong&gt;This text will not be assigned, to any Inactive Tabs, unless you put a breakpoint on this line and watch the value of this line explicitly&lt;/strong&gt;"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.Controls.Add(t); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index = index + 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Surprisingly, you will notice only the Textbox.Text of the Active Tab will have value, &lt;br&gt;however if you go to any other Tab of the MultiViewControl, you will notice that the TextBoxes are empty. &lt;br&gt;&lt;/p&gt; &lt;p&gt;After investigating further we realized that the Viewstates of the dynamically added controls are not saved (for any of the inactive tabs). &lt;br&gt;It became more interesting, when we started to debug, by putting a breakpoint to watch TextBox.Text, surprisingly every TextBox gets populated with desired Text ( for all tabs including the inactive tab, only when you explicitly watch ). Also it saves all ViewState correctly. &lt;br&gt;&lt;br&gt;Not sure whether its a bug,&amp;nbsp; the ASP.NET team may have wanted this behavior to enhance performance of the Multi View control, &lt;/p&gt; &lt;p&gt;but if that is the case, why does it populate the TextBox.Text and also saves into Viewstate, when we try to debug !!!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Do not believe me?&amp;nbsp; Try it by yourself !! &lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=969" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>ASP.NET in VISTA ( IIS7 ) with VS2005 or VS2008</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/968.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/968.aspx</id><published>2008-05-24T13:07:17Z</published><updated>2008-05-24T13:07:17Z</updated><content type="html">&lt;p&gt;The following 2 links may help.&lt;/p&gt; &lt;p&gt;VS 2005: &lt;a href="http://learn.iis.net/page.aspx/431/using-visual-studio-2005-with-iis-70/"&gt;http://learn.iis.net/page.aspx/431/using-visual-studio-2005-with-iis-70/&lt;/a&gt; &lt;br&gt;VS 2008: &lt;a href="http://learn.iis.net/page.aspx/387/using-visual-studio-2008-with-iis-70/"&gt;http://learn.iis.net/page.aspx/387/using-visual-studio-2008-with-iis-70/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=968" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>ASP.NET Tips: Using Image as Embedded Resource for ASP.NET CustomControl</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/967.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/967.aspx</id><published>2008-05-24T13:05:47Z</published><updated>2008-05-24T13:05:47Z</updated><content type="html">&lt;h3&gt;Problem&lt;/h3&gt; &lt;p&gt;I started writing an ASP.NET Custom Server Control, where I wanted an Image to be Embedded Resource of the Assembly itself, &lt;br&gt;so that, I do not need to ship the images separately, but surprisingly it did not work straightway for me. &lt;br&gt;&lt;br&gt;The following line was not working for me: &lt;br&gt;writer.AddAttribute(HtmlTextWriterAttribute.Src, Page.ClientScript.GetWebResourceUrl(typeof(MyControls.MyImageControl), "ferrari.jpg"));&lt;/p&gt; &lt;p&gt;Ok, lets elaborate what I did and what I missed,&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;, I created my ClassLibrary project, added an Image, added a Custom Control class. &lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image1.gif"&gt;&lt;img height="138" alt="Image1" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image1_thumb.gif" width="216" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;, Made the image an embedded resource of the Assembly.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image2.gif"&gt;&lt;img height="346" alt="Image2" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image2_thumb.gif" width="398" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step3&lt;/strong&gt;, Written my very simple Custom Control, where I assigned the image "src" to the WebResource URL&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image3.gif"&gt;&lt;img height="267" alt="Image3" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image3_thumb.gif" width="720" border="0"&gt;&lt;/a&gt; &lt;br&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Step 4, Then I wanted to tryout this CustomControl in my Test Website &lt;br&gt;&lt;br&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image5.gif"&gt;&lt;img height="308" alt="Image5" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image5_thumb.gif" width="663" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Step 5, But I got the following result. &lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image4.gif"&gt;&lt;img height="207" alt="Image4" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image4_thumb.gif" width="235" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image6.gif"&gt;&lt;img height="306" alt="Image6" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image6_thumb.gif" width="706" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Solution&lt;/h3&gt; &lt;p&gt;After investigating a bit, I realized I missed some critical bits.&lt;/p&gt; &lt;p&gt;&lt;br&gt;1. I did not put the correct Resource URL. I discovered this by opening up the assembly via Reflector, I found that the resource URL is different than what I have put in my code. &lt;br&gt;&lt;br&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image8.gif"&gt;&lt;img height="299" alt="Image8" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image8_thumb.gif" width="359" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I corrected the resource URL in my code, (but still it did not work). &lt;br&gt;&lt;/p&gt; &lt;p&gt;writer.AddAttribute(HtmlTextWriterAttribute.Src, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Page.ClientScript.GetWebResourceUrl(typeof(MyControls.MyImageControl), &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "MyControls.images.ferrari.jpg"));&lt;/p&gt; &lt;p&gt;&lt;br&gt;&amp;nbsp;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image9.gif"&gt;&lt;img height="261" alt="Image9" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image9_thumb.gif" width="696" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;br&gt;2. I investigated further and found that I did not explicitly declare the image as WebResource in my assembly info . To get the embedded resource bit working, the following line is very important, and this solved my problem.&lt;/p&gt; &lt;p&gt;&lt;br&gt;[assembly: System.Web.UI.WebResource("MyControls.images.ferrari.jpg", "image/jpg")] &lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image7.gif"&gt;&lt;img height="397" alt="Image7" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image7_thumb.gif" width="710" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Note: We can also put this directly in the class file itself. &lt;/p&gt; &lt;p&gt;&lt;br&gt;After the fix I got the following result as I have desired. &lt;br&gt;&lt;br&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image10.gif"&gt;&lt;img height="244" alt="Image10" src="http://msbdusers.net/shahed/blogImages/ASP.NETTipsEmbedding.NETCustomControldll_F412/Image10_thumb.gif" width="228" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Summary&lt;/h3&gt; &lt;p&gt;I have discussed here, how to embed image in an Assembly and how to use it as WebResource. Two points to note here, which are&amp;nbsp; &lt;br&gt;1. After embedding a resource it is very important to explicitly declare itself as WebResource in the assembly, &lt;br&gt;2. We need correct resourceURL to access resouces from the assembly. Note: its case-sensitive as well. &lt;br&gt;&lt;br&gt;I hope this discussion will save you some time. Thank you for being with me so far.&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=967" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>DataTable to JSON and ToJSON() Extension</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/966.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/966.aspx</id><published>2008-05-24T13:03:38Z</published><updated>2008-05-24T13:03:38Z</updated><content type="html">&lt;p&gt;Very recently I wrote an application where I had to deal with DataSet from a Web Service. &lt;/p&gt; &lt;p&gt;Please note, I have no control on the Web Service and I ended up writing a small function which converts DataTable to JSON.&lt;/p&gt; &lt;p&gt;I understand I haven't gain anything on the web traffic, but it surely simplified my JavaScript programming.&lt;/p&gt; &lt;p&gt;&lt;br&gt;Let me go through what I did&lt;br&gt;&lt;br&gt;&lt;strong&gt;Step 1.&amp;nbsp; Extract the XML Schema. &lt;/strong&gt;&lt;br&gt;DataTable has two handy methods to extract Xml and Xml Schema. I extracted the Xml Schema to be able to generate a C# class using the xsd.exe.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string path = "Your File Path";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myDataTable.WriteXml(path);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myDataTable.WriteXmlSchema(path);  &lt;p&gt;&lt;br&gt;&lt;strong&gt;Step 2. Generate C# Class using Xsd.exe that ships with the .NET Framework.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:\temp&amp;gt;xsd mydatatable.xsd /l:cs /c&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft (R) Xml Schemas/DataTypes support utility&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Microsoft (R) .NET Framework, Version 2.0.50727.42]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copyright (C) Microsoft Corporation. All rights reserved.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Writing file 'C:\temp\mydatatableclass.cs'.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 3. DataTable to Object conversion&lt;/strong&gt;&lt;br&gt;&lt;br&gt;The Web Service returns DataSet/ DataTable, and I want to transform all data that I I receive in the DataTable, to an instance of the class that I just generated in the above step.&amp;nbsp; Something like this:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private T DataTableToT&amp;lt;T&amp;gt;(DataTable dataTable, T obj)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (MemoryStream ms = new MemoryStream())&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataTable.WriteXml(ms);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type thetype = obj.GetType();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer x = new XmlSerializer(thetype);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms.Position = 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (T)x.Deserialize(ms);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;The above method uses the WriteXml() to write the data of DataTable in to a MemoryStream, then using the XmlSerializer I deserialize the xml to a .NET object. Here is how we may use the this method:  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataSet ds = WebService.GetDataSet();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataTable myDataTable = ds.Tables[0];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyDataTableClass obj = DataTableToT(myDataTable, new MyDataTableClass());  &lt;p&gt;&lt;br&gt;&lt;strong&gt;Step 4. Serialize .NET object to JSON&lt;br&gt;&lt;/strong&gt;&lt;br&gt;We have done the hard part above, now we have .NET object so we have all the flexibility as you can imagine. I found that there is a handful amount of libraries which can serialize .Net Objects to JSON string ie. JavaScriptSerializer, DataContractJsonSerializer, JSON.NET etc.&lt;/p&gt; &lt;p&gt;JavaScriptSerializer ships with System.Web.Extensions.dll and you can locate it under Namespace:&amp;nbsp; System.Web.Script.Serialization. The following method returns JSON from a .NET object using JavaScriptSerializer.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string GetJSONUsingJavaScriptSerializer&amp;lt;T&amp;gt;(T obj)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JavaScriptSerializer serializer = new JavaScriptSerializer();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string json =&amp;nbsp;&amp;nbsp; serializer.Serialize(obj);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return json;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&lt;br&gt;DataContractJsonSerializer also does pretty much the same as above, it ships with .NET Framework 3.5 :&amp;nbsp; System.ServiceModel.Web.dll, and you can locate this under&amp;nbsp; Namespace:&amp;nbsp; System.Runtime.Serialization.Json, But we need to decorate the class with DataContract and DataMember attributes. Example&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DataContract]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Order&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DataMember]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int OrderID { get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DataMember]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DateTime OrderDate { get; set; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p&gt;&lt;br&gt;and the following method can return a JSON string.&lt;br&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string GetJSONUsingDataContractJsonSerializer&amp;lt;T&amp;gt;(T obj)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (MemoryStream ms = new MemoryStream())&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer.WriteObject(ms, obj);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Encoding.UTF8.GetString(ms.ToArray());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&lt;br&gt;&lt;strong&gt;Conclusion&lt;br&gt;&lt;/strong&gt;&lt;br&gt;Here we have discussed how we can easily transform a DataTable to JSON. Sometimes we do not have enough control over the Web Service, or we may need to invoke a legacy Web Service that returns DataSet/ DataTable. In those scenarios sometimes converting DataTable to JSON comes very handy in AJAX programming. In the above example I have shown plain vanilla .NET methods, but we can even take it further and implement Extention methods to return JSON string. &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx"&gt;Scott&lt;/a&gt; has shown in his blog how to produce JSON using JavascriptSerializer. Here I show how we can do the same using DataContractJsonSerializer.&lt;br&gt;&lt;br&gt;Example:  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static string ToJSON&amp;lt;T&amp;gt;(this T obj)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (MemoryStream ms = new MemoryStream())&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer.WriteObject(ms, obj);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Encoding.UTF8.GetString(ms.ToArray());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;and then we will be able to use it like this on a order collection,&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string json = orders.ToJSON();&lt;/p&gt; &lt;p&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Hope this helps.&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=966" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>Visual Studio 2005 Debugging in Vista</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/965.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/05/24/965.aspx</id><published>2008-05-24T13:00:42Z</published><updated>2008-05-24T13:00:42Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: I was trying to debug in Visual Studio 2005 in my new machine which came with Vista Home Premium. Surprisingly I found that none of the break points are touched and I cannot debug. I tried giving all types of permission to the folder but no luck.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: After googling a bit, I found that I needed to run VisualStudio2005 as an Administrator, and everything started working as I expected.&lt;/p&gt; &lt;p&gt;So all I had to do is : &lt;br&gt;&lt;em&gt;Right-click the Visual Studio icon and select the "Run as administrator" option from the context menu.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://msbdusers.net/shahed/blogImages/VisualStudio2005DebugginginVista_BFF5/vs05run.jpg"&gt;&lt;img height="244" alt="vs05run" src="http://msbdusers.net/shahed/blogImages/VisualStudio2005DebugginginVista_BFF5/vs05run_thumb.jpg" width="175" border="0"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Hope this saves some of your time.&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=965" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>The Big Ten Life and Work Changing Utilities from Scott Hanselmans BLOG</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/03/11/658.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/03/11/658.aspx</id><published>2008-03-11T05:47:45Z</published><updated>2008-03-11T05:47:45Z</updated><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;Please check the following link for all the Power tools and Utilities for Power .NET developers.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a title="http://www.hanselman.com/blog/ScottHanselmans2007UltimateDeveloperAndPowerUsersToolListForWindows.aspx" href="http://www.hanselman.com/blog/ScottHanselmans2007UltimateDeveloperAndPowerUsersToolListForWindows.aspx"&gt;http://www.hanselman.com/blog/ScottHanselmans2007UltimateDeveloperAndPowerUsersToolListForWindows.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;OR&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.hanselman.com/tools" href="http://www.hanselman.com/tools"&gt;http://www.hanselman.com/tools&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=658" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>MIX 08 Videos, Downloads and IE 8 Beta 1 available to download</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/03/06/657.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/03/06/657.aspx</id><published>2008-03-06T06:37:45Z</published><updated>2008-03-06T06:37:45Z</updated><content type="html">&lt;p&gt;IE 8 Beta1 links are live now. You can download it here:&lt;br&gt;&lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/Install.htm"&gt;http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/Install.htm&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;MIX 08&lt;br&gt;&lt;br&gt;To access additional information including customer and partner demos and footage from the event floor, visit MIX08 virtually at&lt;br&gt;&lt;a title="http://visitmix.com/" href="http://visitmix.com/"&gt;http://visitmix.com/&lt;/a&gt; &lt;p&gt;&lt;br&gt;MIX 08 Video&lt;br&gt;&lt;a title="http://www.microsoft.com/presspass/events/mix/default.mspx" href="http://www.microsoft.com/presspass/events/mix/default.mspx"&gt;http://www.microsoft.com/presspass/events/mix/default.mspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=657" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry><entry><title>Javascript Tips: Carefully use &amp;quot;this&amp;quot; when writing classes, else you may cause memory leak.</title><link rel="alternate" type="text/html" href="http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/02/22/653.aspx" /><id>http://dotnetusergroup.com/blogs/shahedkhan/archive/2008/02/22/653.aspx</id><published>2008-02-22T05:37:00Z</published><updated>2008-02-22T05:37:00Z</updated><content type="html">&lt;P&gt;Lets say we want to declare a class in Javascript, which is equivalent to the following C# class.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Student
{
  &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; FirstName = &lt;SPAN class=str&gt;""&lt;/SPAN&gt;;
  &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; LastName = &lt;SPAN class=str&gt;""&lt;/SPAN&gt;;

  &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; Student( &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; firstname, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; lastname)
  {
    &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.FirstName = firstname;
    &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.LastName = lastname;
  }
  
  &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; GetFullName()
  {
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; FirstName + LastName;
  }
}&lt;/PRE&gt;
&lt;P&gt;To write a similar class in JavaScript we can do something like the following [ but this will create memory leak, I am explaining that in a moment ]&lt;BR&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; Student ( firstname, lastname)
{
  &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.FirstName = firstname;
  &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.LastName = lastname;

  &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.GetFullName = &lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt;()
  {
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.FirstName + &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.LastName;
  }

}&lt;BR&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;BR&gt;&lt;BR&gt;now in C# if we want to instantiate an object of Student and want to call the GetFullName() method, we do the following.&lt;BR&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;Student student = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Student(&lt;SPAN class=str&gt;"Shahed"&lt;/SPAN&gt;, &lt;SPAN class=str&gt;"Khan"&lt;/SPAN&gt;);
&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; fullname = student.GetFullName();&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;and we can create as many objects as we want and call its methods, each of the object will maintain its own state, and all objects will use the same copy of the GetFullName()&amp;nbsp; method.&lt;BR&gt;&lt;BR&gt;But Javascript has different behaviour when we do the following on the above Javascript class.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;var&lt;/SPAN&gt; student = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Student(&lt;SPAN class=str&gt;"Shahed"&lt;/SPAN&gt;,&lt;SPAN class=str&gt;"Khan"&lt;/SPAN&gt;);
car fullname = student.GetFullName();
&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;In Javascript, functions are treated as variables as a result when we create a new object of Student it creates&amp;nbsp; new sets of firstname, lastname and also a new copy of GetFullname method, as a result we are creating memoryleak.&lt;BR&gt;&lt;BR&gt;Do not worry too much, there is a workaround for this, lets redefine the class in a different way.&lt;BR&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; Student ( firstname, lastname)
{
  &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.FirstName = firstname;
  &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.LastName = lastname;

  &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.GetFullName = GetFullName;

}

&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; GetFullName()
{
  &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.FirstName + &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.LastName;
}
&lt;/PRE&gt;&lt;BR&gt;Notice I have moved the GetFullName function out of the class, and for this tweaking all new objects of the Student class will share the same instance of of GetFullName method and avoid memory leak.&lt;BR&gt;&lt;BR&gt;Thank you for being with me so far. &lt;BR&gt;&lt;BR&gt;
&lt;P&gt;Updated 24th Feb&lt;BR&gt;===============&lt;BR&gt;Laurent from Galasoft gave some good feedback,&amp;nbsp;&lt;BR&gt;JavaScript object oriented should be done by modifying the prototype property of the object, and never by storing methods using the "this" keyword. The workaround&amp;nbsp;provided above&amp;nbsp;is not good practice, as it forces the use of a global function. We should always declare methods in JavaScript object like this:&lt;BR&gt;&amp;nbsp;&lt;BR&gt;function Student(firstName, lastName)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;this.firstName = firstName;&lt;BR&gt;&amp;nbsp;this.lastName = lastName;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;Student.prototype =&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;getFullName : function()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; return this.firstName + " " + this.lastName;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;also note correct naming convension, ( Javascript follows Java notation not C#). For JavaScript best practices please refer to the work of Microsoft Silverlight team.&lt;/P&gt;&lt;img src="http://dotnetusergroup.com/aggbug.aspx?PostID=653" width="1" height="1"&gt;</content><author><name>Shahed</name><uri>http://dotnetusergroup.com/members/Shahed.aspx</uri></author></entry></feed>