C# 是否可以使用ExpandooObject创建动态树结构?

C# 是否可以使用ExpandooObject创建动态树结构?,c#,visual-studio-2010,dynamic,c#-4.0,expandoobject,C#,Visual Studio 2010,Dynamic,C# 4.0,Expandoobject,目前,我正在使用ExpandoObject动态存储firstname和姓氏 e、 g //为测试创建Expando对象 动态员工=新的ExpandooObject(); //动态地将字段添加到expando ((i词典)雇员)。添加(“名字”、“约翰”); ((i词典)雇员)。加上(“姓氏”、“史密斯”); 我想知道是否有可能将字段动态存储到树结构中,这样我就可以将父字段命名为Name,然后将两个子字段命名为Firstname和lasname。理想情况下,这可能会扩展到包含更多子级别。我在下面

目前,我正在使用ExpandoObject动态存储firstname和姓氏

e、 g

//为测试创建Expando对象
动态员工=新的ExpandooObject();
//动态地将字段添加到expando
((i词典)雇员)。添加(“名字”、“约翰”);
((i词典)雇员)。加上(“姓氏”、“史密斯”);
我想知道是否有可能将字段动态存储到树结构中,这样我就可以将父字段命名为Name,然后将两个子字段命名为Firstname和lasname。理想情况下,这可能会扩展到包含更多子级别。我在下面编写了一些psudo代码,以理想地演示我希望它如何工作。(当然,此代码当前会导致错误)

//为测试创建Expando对象
动态员工=新的ExpandooObject();
//动态添加名称
((IDictionary)employee)。添加(“姓名”、“姓名”);
//动态地将名字和姓氏添加到employee.Name
((i词典)employee.Name)。添加(“FirstName”、“John”);
((IDictionary)employee.Name)。添加(“姓氏”、“史密斯”);

什么会阻止你这么做

 dynamic parent = new ExpandoObject();
 parent.Nick = "Dad";
 parent.Name = new ExpandoObject();
 parent.Name.FirstName = "John";
 parent.Name.MiddleName = "Tweeds";
 parent.Name.SurName = "Doe";

 parent.Spouse = new ExpandoObject();
 parent.Spouse.Nick = "Sweety";
 parent.Children = new [] {
     new ExpandoObject(),
     new ExpandoObject()
 };
 parent.Children[0].Nick = "P-J";
 parent.Children[0].Name = "Pete-Jay";
 parent.Children[1].Nick = "Tammie";
 parent.Children[1].Name = "Tamara";
还是类似的?您不会完全免费获得树遍历,但在不使用strongtypes节点时,这基本上是给定的

更新;我只是在Windows XP上使用Mono C#编译器编译并运行了这个程序。甚至没有安装MS.NET 4.0:)

使用开放源代码(可以通过nuget安装,并且是一个可移植类库),您可以制作如下expandoobject图形:

  using Dynamitey.DynamicObjects;
  ...

  dynamic New = Builder.New<ExpandoObject>();

  var person = New.Person(
      Name: New.Name(FirstName:"John", SurName:"Smith")
  );

Expando?那是哈利波特的咒语吗+1.有趣question@sehe,@George:是的,我是谷歌认证的2003@sehe,我想你以前从未听说过它,希望能有一个链接。nm@George例如我从未听说过。这是一个好发现,这就是为什么我表达了我的惊讶。很抱歉,如果我有时在SOYeah这样的信息网站上太激动了,这是一个选项,但由于它是全新的,我想知道是否有人在树/文件夹视图方面做了一些有趣的事情。感谢回复树/文件夹视图?当我读到它的时候,这不是你的问题的一部分,我只是提到了它,因为我正在研究扩展它,以便在我的帖子中包含更多类似于树视图的子级别。
 dynamic parent = new ExpandoObject();
 parent.Nick = "Dad";
 parent.Name = new ExpandoObject();
 parent.Name.FirstName = "John";
 parent.Name.MiddleName = "Tweeds";
 parent.Name.SurName = "Doe";

 parent.Spouse = new ExpandoObject();
 parent.Spouse.Nick = "Sweety";
 parent.Children = new [] {
     new ExpandoObject(),
     new ExpandoObject()
 };
 parent.Children[0].Nick = "P-J";
 parent.Children[0].Name = "Pete-Jay";
 parent.Children[1].Nick = "Tammie";
 parent.Children[1].Name = "Tamara";
  using Dynamitey.DynamicObjects;
  ...

  dynamic New = Builder.New<ExpandoObject>();

  var person = New.Person(
      Name: New.Name(FirstName:"John", SurName:"Smith")
  );
using Dynamitey.DynamicObjects.Dictionary = DynamicDict;
...

dynamic obj = new DynamicDict(nestedDictionaries);