У меня есть следующий анонимный тип:
new {data1 = "test1", data2 = "sam", data3 = "bob"}
Мне нужен метод, который примет это, и производить пар значения ключа в массиве или словаре.
Моя цель состоит в том, чтобы использовать это в качестве данных сообщения в HttpRequest, таким образом, я в конечном счете конкатенирую в в следующую строку:
"data1=test1&data2=sam&data3=bob"
Для этого требуется совсем немного отражения.
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);
Если вы используете .NET 3.5 SP1 или .NET 4, вы можете (ab)использовать RouteValueDictionary
для этого. Он реализует IDictionary
и имеет конструктор, который принимает object
и преобразует свойства в пары ключ-значение.
Затем будет тривиально перебирать ключи и значения для построения строки запроса.
Вот как они делают это в 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);
}
}
}
Полный источник здесь: http://pastebin.com/c1gQpBMG