2015-01-19 2 views
3

Как преобразовать динамический элемент в NameValueCollection?Преобразование динамического объекта в NameValueCollection

Я попытался преобразовать его в словарь, а затем в NameValueCollection, но он будет генерировать исключения для разных типов.

[...] 
    NameValueCollection item = ((IDictionary<string, object>)dynamicObject).ToNameValueCollection(); 
[...] 

public static NameValueCollection ToNameValueCollection<TKey, TValue>(this IDictionary<TKey, TValue> dictionary) 
{ 
    var nameValueCollection = new NameValueCollection(); 
    foreach (var pair in dictionary) 
    { 
    string value = pair.Value == null ? null : value = pair.Value.ToString(); 
    nameValueCollection.Add(pair.Key.ToString(), value); 
    } 
    return nameValueCollection; 
} 

ответ

4

Я узнал ответ:

using System.ComponentModel; 
using System.Collections.Generic; 
using System.Collections.Specialized; 

public static class Extensions 
{ 
    public static NameValueCollection ToNameValueCollection<T>(this T dynamicObject) 
    { 
    var nameValueCollection = new NameValueCollection(); 
    foreach (PropertyDescriptor propertyDescriptor in TypeDescriptor.GetProperties(dynamicObject)) 
    { 
     string value = propertyDescriptor.GetValue(dynamicObject).ToString(); 
     nameValueCollection.Add(propertyDescriptor.Name, value); 
    } 
    return nameValueCollection; 
    } 
} 

Чтобы использовать его:

public void DoStuff(dynamic obj) 
{ 
    NameValueCollection items = obj.ToNameValueCollection(); 
    // Do stuff with items 
} 
+0

Я попытался это, но я получаю сообщение об ошибке: 'Недопустимое имя столбца«ToNameValueCollection «У меня есть результат из' WebMatrix.Data.Database.Query', и я надеялся использовать его для преобразования каждой строки в NameValueCollection: 'foreach (var Row in ResultSet) {NameValueCollection N = Row.ToNameValueCollection (); // Делаем материал с n} ' –

Смежные вопросы