是否可以使用ExpandoObject创建动态树结构?

问题描述:

此刻我正在使用ExpandoObject动态存储名字和姓氏。是否可以使用ExpandoObject创建动态树结构?

例如

// Create Expando object for testing 
    dynamic employee = new ExpandoObject(); 

    // Dynamically add the fields to the expando    
    ((IDictionary<String, Object>)employee).Add("FirstName", "John"); 
    ((IDictionary<String, Object>)employee).Add("Surname", "Smith"); 

我在想,如果有可能的领域动态存储到一个树形结构,这样我可以有一个名为名称父字段,然后两个子字段:名字和姓氏。理想情况下,这可能会扩展到包含更多的子级别。我已经在下面做了一些psudo代码来理想地展示我希望如何工作。 (当然这个代码目前导致错误)

// Create Expando object for testing 
dynamic employee = new ExpandoObject(); 

// Dynamically add the Name 
((IDictionary<String, Object>)employee).Add("Name", ""); 

//Dynamically add the firstname and surname to employee.Name 
((IDictionary<String, Object>)employee.Name).Add("FirstName", "John"); 
((IDictionary<String, Object>)employee.Name).Add("Surname", "Smith");  
+0

Expando?那是哈利波特的咒语吗? +1有趣的问题 – sehe 2011-05-23 15:01:31

+0

@sehe,http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx – 2011-05-23 15:03:41

+0

@George:是的,我自2003年起通过谷歌认证 – sehe 2011-05-23 15:07:36

什么从做

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安装:)

+0

这样的信息网站上被带走太多是的,这是一个选项,但是因为它很新,我想知道是否有人在树/文件夹视图中做了任何有趣的事情。感谢您的回答 – kevchadders 2011-05-24 07:40:33

+0

树/文件夹视图?当我阅读它时,这不是你问题的一部分 – sehe 2011-05-24 08:19:04

+0

没错,我只是提到它,因为我正在考虑将其扩展为在类似树视图的帖子中包含更多子级别。 – kevchadders 2011-05-24 08:58:59

使用开源Dynamitey(可通过安装的NuGet,并且是一种便携式类库),你可以expandoobject图所示:

using Dynamitey.DynamicObjects; 
    ... 

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

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

你也可以采取一堆嵌套IDictionary<string,object>,并使它们像嵌套动态对象属性的动态对象一样使用:

using Dynamitey.DynamicObjects.Dictionary = DynamicDict; 
... 

dynamic obj = new DynamicDict(nestedDictionaries); 
+0

感谢您的意见+1 – kevchadders 2014-02-12 15:39:07