In c# convert anonymous type into key/value array?
This takes just a tiny bit of reflection to accomplish.
var a = new { data1 = "test1", data2 = "sam", data3 = "bob" };
var type = a.GetType();
var props = type.GetProperties();
var pairs = props.Select(x => x.Name + "=" + x.GetValue(a, null)).ToArray();
var result = string.Join("&", pairs);
If you are using .NET 3.5 SP1 or .NET 4, you can (ab)use RouteValueDictionary
for this. It implements IDictionary<string, object>
and has a constructor that accepts object
and converts properties to key-value pairs.
It would then be trivial to loop through the keys and values to build your query string.
Here is how they do it in RouteValueDictionary:
private void AddValues(object values)
{
if (values != null)
{
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(values))
{
object obj2 = descriptor.GetValue(values);
this.Add(descriptor.Name, obj2);
}
}
}
Full Source is here: http://pastebin.com/c1gQpBMG