6

現在、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という2つの子フィールドを作成できるかどうか疑問に思いました。理想的には、これを拡張して、より多くのサブレベルを含めることができます。以下の疑似コードをいくつか実行して、理想的にどのように機能させたいかを示しました。(もちろん、このコードは現在エラーを引き起こします)

// 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");       
4

2 に答える 2

6

何があなたをやめさせるのか

 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でMonoC#コンパイラを使用してこれをコンパイルして実行しました。MS.NET4.0がインストールされていなくても:)

于 2011-05-23T15:11:29.507 に答える
4

オープンソースのDynamitey(nuget経由でインストールでき、ポータブルクラスライブラリ)を使用すると、次のようなエキスパンドオブジェクトグラフを作成できます。

  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);
于 2011-07-18T14:40:03.380 に答える