Как преобразовать в словарь из значения словаря
У меня есть словарь, который содержит другой словарь в пределах значения.
то есть:
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"];