在C#中使用ExpandoObject在运行时使用数据动态创建带有动态子对象的对象

电视台

我已经创建了一个动态对象,并在运行时使用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并返回“ Plumber”或parentDynamic.GroupOne.ChildOne.FirstName并返回“ John”

本来我想像这样一次完成所有作业

 parentDynamic["GroupOne"]["ChildOne"]["Occupation"] = "Plumber"

但是我收到错误消息:无法将[]的索引应用于类型为'System.Dynamic.ExpandoObject'的表达式,这就是为什么我沿着创建父对象和子对象并将其首先转换为Dictionary对象的原因走的原因。理想情况下,我想像上面那样做,因为它更简单。

伊万·斯托夫(Ivan Stoev)

为了能够使用parentDynamic.GroupOne.ChildOne语法,GroupOne属性(ExpandoObject在您的情况下为)也应该是动态string

像这样的东西:

dynamic parentDynamic = new ExpandoObject();
parentDynamic.GroupOne = new ExpandoObject();
parentDynamic.GroupOne.ChildOne = new ExpandoObject();
parentDynamic.GroupOne.ChildOne.FirstName = "John";
parentDynamic.GroupOne.ChildOne.LastName = "Smith";
parentDynamic.GroupOne.ChildOne.Occupation = "Plumber";

或搭配IDictionary<string, object>演员:

IDictionary<string, object> parent = new ExpandoObject();
IDictionary<string, object> group = new ExpandoObject();
IDictionary<string, object> child = new ExpandoObject();
child["FirstName"] = "John";
child["LastName"] = "Smith";
child["Occupation"] = "Plumber";
parent["GroupOne"] = group;
group["ChildOne"] = child;
dynamic parentDynamic = parent;
Console.WriteLine(parentDynamic.GroupOne.ChildOne.Occupation);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

c#在运行时动态创建通用列表

来自分类Dev

c#在运行时动态创建通用列表

来自分类Dev

动态平面C#对象类在运行时的属性列表

来自分类Dev

在运行时使用动态名称创建Qlabel

来自分类Dev

如何在运行时动态创建C#类(根据现有类)

来自分类Dev

Android-使用Dagger在运行时创建对象

来自分类Dev

在运行时创建对象并使用它们

来自分类Dev

我可以在运行时使用C#动态构建函数吗?

来自分类Dev

在运行时创建“动态”数据模板

来自分类Dev

在运行时从动态加载的dll创建对象列表

来自分类Dev

在运行时动态创建类

来自分类Dev

在运行时获取带有注释的guice对象?

来自分类Dev

如何在Java运行时动态创建对象

来自分类Dev

使用Webpack在运行时动态要求JS文件

来自分类Dev

在运行时使用动态参数调用 printf

来自分类Dev

在运行时创建Command对象

来自分类Dev

在运行时创建对象?

来自分类Dev

如何在运行时使用python动态创建新的类实例?

来自分类Dev

在运行时确定对象类型-C#

来自分类Dev

C++ 在运行时获取带有 ID 的对象

来自分类Dev

对象属性的运行时动态

来自分类Dev

是否可以在运行时确定对象选择的情况下使用C ++对象组成?

来自分类Dev

使用继承在运行时扩展Python对象

来自分类常见问题

如何在运行时使用LambdaMetaFactory创建代理对象?

来自分类Dev

如何从可以在运行时使用的资源文件中创建和调用类对象?

来自分类Dev

如何在运行时使用依赖注入创建新对象

来自分类Dev

Delphi:在运行时以动态创建的形式创建TComboBox

来自分类Dev

动态对象强制转换为仅在运行时已知的类型

来自分类Dev

如何在运行时动态增加任何结构对象的大小?

Related 相关文章

热门标签

归档