Уловкой является построение строки Key
, как если бы это было пространство имен. Выполнение этого с рекурсией - это моя текущая реализация, но я уверен, что есть более удобные для стека параметры (LINQ? Iterative?), Которые я еще не смог найти. Почти каждый пример слишком прост и не учитывает возможность «импровизировать» их на основе ключевой иерархии.Самый эффективный способ сглаживания вложенного словаря?
Вот краткий пример макета моего словаря. Надеюсь, это достаточно легко понять - я хотел быть основательным.
преобразовать JSON, похожее на это (вложенными, чтобы сохранить данные по проводам):
"entity": {
"foo": {
"bar": {
"baz": {
"2": "description",
"1": "title"
}
}
в Dictionary<string,object>
. Когда Value is string
, это конец «пространства имен». Подробный, путая взгляд на этот предмет:
[0] {[entity, Dictionary[String,Object]]} KeyValuePair<string,object>
Key "entity" string
Value Count = 1 object {Dictionary<string,object>}
[0] {[foo, Dictionary[String,Object]]} KeyValuePair<string,object>
Key "foo" string
Value Count = 12 object {Dictionary<string,object>}
[0] {[bar, Dictionary[String,Object]]} KeyValuePair<string,object>
Key "bar" string
Value Count = 1 object {Dictionary<string,object>}
[0] {[baz, Dictionary[String,Object]]} KeyValuePair<string,object>
Key "baz" string
Value Count = 3 object {Dictionary<string,object>}
[0] {[3, title]} KeyValuePair<string,object>
Key "3" string
Value "title" object {string}
Это KeyValuePair
бы в конечном итоге: "entity.foo.bar.baz.title.3", "3"
Не могли бы вы предоставить код? Трудно прочитать выше –
Почему вы не храните «entity.foo.bar.baz.title» в качестве ключа внутри одного словаря? Если это невозможно, вы можете представить пример запроса, как бы вы запрашивали свою иерархию. – duedl0r
@ duedl0r Вложен, потому что библиотека ключей очень большая и отправляется в виде JSON. Вложение значительно уменьшает количество передаваемых данных. – erodewald