2013-05-28 5 views
0

У меня есть словарь, который содержит еще один словарь в пределах значения.Как преобразовать в словарь из значения словаря

т.е .:

Dictionary<string, object> primaryList = new Dictionary<string, object>(); 
var secondaryList = primaryList.Select(x => x.Value); 

Мне нужно, чтобы получить значение в качестве словаря в secondaryList. Как я могу это сделать?

Я получаю коллекцию на десериализации JSON по следующей ссылке:

Deserialize JSON into C# dynamic object?

От объекта, мне нужно, чтобы разобрать значение из основного списка ключевой пары значений.

+0

Какой тип значения? Возникает вопрос, как преобразовать одно значение в словарь? –

+0

Не можем ли мы преобразовать объект в словарь? – NewBie

+0

Знаете ли вы заранее тип ключа и тип значения в содержащемся словаре? (Если вы это делаете, почему ваш внешний словарь не определен, чтобы содержать этот конкретный тип?) –

ответ

0

Вы можете использовать метод Cast() расширения для отбрасывать объекты в коллекции к определенному типу:

var secondaryList = primaryList.Select(x => x.Value) 
           .Cast<Dictionary<string, object>>(); 

Это будет сбой при исключении, если какой-либо из объектов в коллекции не может быть добавлен в Dictionary<string, object>. Вы также можете использовать OfType<Dictionary<string, object>>(), чтобы выбрать только те элементы, которые относятся к этому типу.

var secondaryList = primaryList.Select(x => x.Value) 
           .OfType<Dictionary<string, object>>(); 

При выборе подмножества словаря, вы можете использовать метод ToDctionary() расширения.

Dictionary<string, object> l_d = new Dictionary<string, object>(); 
l_d.Add("Apple", 1); 
l_d.Add("Access", 2); 
l_d.Add("Barber", 3); 
l_d.Add("Bacon", 4); 

Dictionary<string, object> l_d2 = 
    l_d.Where(x => x.Key.StartsWith("A")) 
     .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 
2

Dictionary<T, V> - это общая коллекция, где T или V также могут быть словарем.

Попробуйте следующий:

Dictionary<string, Dictionary<object, object>> 

вместо

Dictionary<string, object> 
+0

Кроме того, если вы уверены, что ваше значение является словарем, вы можете применить объект к своему Словарю. –

+0

Если вы знаете типы объектов, входящих в ваши коллекции, эти типы должны использоваться как Geka, как показано здесь. Всегда избегайте использования объекта, когда это возможно. – Jay

1

Если вы знаете, что они все словари, то просто определить свой словарь, как

var primaryList = new Dictionary<string, Dictionary<key-type, value-type>>(); 

В противном случае используйте OfType() для фильтрации Values коллекции.

var secondaryList = primaryList.Select(x => x.Value).OfType<Dictionary<key-type, value-type>>(); 

Рассмотрите возможность использования List<>, если вы на самом деле не используя Dictionary делать поиск.

0
Dictionary<string, Dictionary<string, object>> value = new Dictionary<string, Dictionary<string, object>>(); 

Dictionary<string, object> childDictionary = value["SomeValue"]; 
Смежные вопросы