如何解决是否可以使用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\");
我想知道是否可以将字段动态存储到树结构中,以便我可以将父字段称为Name,然后将两个子字段称为Firstname和Surname。理想情况下,可以将其扩展为包含更多子级别。我在下面做了一些伪代码,以理想地演示我希望它如何工作。 (当然,此代码当前会导致错误)
// 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\");
解决方法
是什么阻止了您
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 :)
,使用开源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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。