В c# преобразовывают анонимный тип в массив ключа/значения?

У меня есть следующий анонимный тип:

new {data1 = "test1", data2 = "sam", data3 = "bob"}

Мне нужен метод, который примет это, и производить пар значения ключа в массиве или словаре.

Моя цель состоит в том, чтобы использовать это в качестве данных сообщения в HttpRequest, таким образом, я в конечном счете конкатенирую в в следующую строку:

"data1=test1&data2=sam&data3=bob"
75
задан Chris Kooken 14 August 2010 в 03:47
поделиться

3 ответа

Для этого требуется совсем немного отражения.

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);
114
ответ дан 24 November 2019 в 11:29
поделиться

Если вы используете .NET 3.5 SP1 или .NET 4, вы можете (ab)использовать RouteValueDictionary для этого. Он реализует IDictionary и имеет конструктор, который принимает object и преобразует свойства в пары ключ-значение.

Затем будет тривиально перебирать ключи и значения для построения строки запроса.

61
ответ дан 24 November 2019 в 11:29
поделиться

Вот как они делают это в 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

25
ответ дан 24 November 2019 в 11:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: