Я создал динамический объект и установил для него свойства и значения во время выполнения с помощью ExpandoObject.
dynamic parentDynamic = new ExpandoObject();
var parentName = "GroupOne";
((IDictionary<String, Object>)parentDynamic)[parentName] = "default";
Console.WriteLine(parentDynamic.GroupOne);
Консоль успешно выводит «по умолчанию», как и ожидалось.
Я также создал дочерний объект с несколькими свойствами таким же образом.
dynamic childDynamic = new ExpandoObject();
var childProperty1 = "FirstName";
var childProperty2 = "LastName";
var childProperty3 = "Occupation";
((IDictionary<String, Object>)childDynamic)[childProperty1] = "John";
((IDictionary<String, Object>)childDynamic)[childProperty2] = "Smith";
((IDictionary<String, Object>)childDynamic)[childProperty3] = "Plumber";
Console.WriteLine(childDynamic.Occupation);
Консоль успешно выводит «Сантехник», как и ожидалось.
Где я попадаю в пробку, так это когда я пытаюсь добавить объект childDynamic к объекту parentDynamic и дать ему имя во время выполнения. Вот моя последняя неудачная попытка:
var childName = "ChildOne";
((IDictionary<String, Object>)((IDictionary<String, Object>)parentDynamic)[parentName])[childName] = childDynamic;
Console.Write(parentDynamic.GroupOne.ChildOne.Occupation);
Ошибка, которую я получаю при попытке присвоения: Невозможно привести объект типа «System.String» к типу «System.Collections.Generic.IDictionary`2[System.String,System.Object]». сильный>
По сути, я хотел бы иметь доступ к parentDynamic.GroupOne.ChildOne.Occupation и вернуть «Сантехник» или parentDynamic.GroupOne.ChildOne.FirstName и вернуть «Джон»
Изначально я пытался сделать все задания сразу, вот так
parentDynamic["GroupOne"]["ChildOne"]["Occupation"] = "Plumber"
Но я получаю сообщение об ошибке Невозможно применить индексирование с помощью [] к выражению типа «System.Dynamic.ExpandoObject». Вот почему я пошел по пути создания родительского и дочернего объектов и приведения их к словарю. объекты в первую очередь. В идеале я хотел бы просто сделать что-то подобное выше, поскольку это НАМНОГО проще.
default
, а затем вы пытаетесь привести это значение к словарю. - person Rob   schedule 17.06.2016parentDynamic.GroupOne = "default";
и далее вы пытаетесь сделать вид, чтоparentDynamic.GroupOne
— это словарь, а это не так. Вместо того, чтобы назначать ему"default"
, вы должны назначить ему словарь - person Rob   schedule 17.06.2016parentDynamic["GroupOne"]["ChildOne"].Occupation = "Plumber"
, но я получаю сообщение об ошибке Невозможно применить индексирование с помощью [] к выражению типа 'System.Dynamic.ExpandoObject' - person INNVTV   schedule 17.06.2016parentDynamic["GroupOne"]["ChildOne"].["Occupation"] = "Plumber"
но я получаю сообщение об ошибке Невозможно применить индексирование с помощью [] к выражению типа 'System.Dynamic.ExpandoObject' Обработка этого в одной строке предпочтительнее создавать родительские/дочерние объекты. Я отредактировал свой вопрос выше, чтобы добавить это. - person INNVTV   schedule 17.06.2016