Как преобразовать в словарь из значения словаря

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

то есть:

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

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

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

Десериализовать JSON в C# динамический объект?

Из объекта мне нужно проанализировать значение из первичного списка в пару ключ-значение.

4 ответа

Решение

Вы можете использовать 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 );

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

Попробуй дальше:

Dictionary<string, Dictionary<object, object>> 

вместо

Dictionary<string, object>

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

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 делать поиски.

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

 Dictionary<string, object> childDictionary = value["SomeValue"];
Другие вопросы по тегам