0

ディクショナリ(または他の名前と値のコレクション)からプロパティをマップできるオブジェクト-オブジェクトマッパーはありますか?

クラスがあるとしましょう

public class SomeClass
{
    public string Text { get; set; }
    public Address HomeAddress { get; set; }
    public List<int> Numbers { get; set; }
}
public class Address
{
    public string Street { get; set; }
    public string PostalCode { get; set; }
    public string City { get; set; }    
}

私がやりたいのは

var values = new Dictionary<string,object>();
values.Add("Text","Foo");
values.Add("HomeAddress.Street","Some street 123");
values.Add("HomeAddress.PostalCode","12345");
values.Add("HomeAddress.City","Some city");
values.Add("Numbers[0]",123);
values.Add("Numbers[1]",234);
values.Add("Numbers[2]",345);

SomeClass some = aMapperTool.CreateFromDictionary<SomeClass>(values);

これは基本的に、ASP.NET MVCのDefaultModelBinderに似ています。これは、多くのコンテキストとメタデータ関連のものを必要とするため、あまり便利ではありません。

4

2 に答える 2

0

このため、リフレクション ツリーやエクスプレッション ツリーを回避することはできません。

リフレクションを使用すると、おおよそ次のようになります。

  1. のオブジェクトを作成するT
  2. のキーを反復処理し、details必要に応じて、そこから実際のプロパティ名を作成します ( HomeAddress.Street-> HomeAdress、またはNumbers[0]-> Number)。プロパティのタイプによって異なります ( が見つかった場合は.最初に子オブジェクトを構築する必要があり、 が見つかった[場合は を初期化する必要がありますIEnumerable)。
  3. 子構造を構築した後、親オブジェクトを構築します。

これは可能な解決策ですが、私の頭の中には 1 つの疑問があります。

于 2011-01-30T01:22:53.723 に答える