1. ホーム
  2. c#

[解決済み] Dictionary<string, object>を匿名オブジェクトに変換する?

2023-05-04 08:02:46

質問

まず、わかりやすくするために、私のシナリオを上から順に説明します。

次のようなシグネチャを持つメソッドがあります。

public virtual void SendEmail(String from, List<String> recepients, Object model)

私がしたいことは、モデルオブジェクトのプロパティと同様に最初の2つのパラメータを持つ無名オブジェクトを生成することです。モデルオブジェクトをPropertyInfo[]にフラット化するのは非常に簡単です。そこで、PropertyInfo と最初の 2 つのパラメータを保持する Dictionary を作成し、キーがプロパティの名前、値がプロパティの実際の値である匿名オブジェクトに変換することを考えた。

それは可能ですか?他の提案はありますか?

どのように解決するのですか?

どうしても辞書を、辞書の項目をプロパティとして持つオブジェクトに変換したい場合は ExpandoObject :

var dict = new Dictionary<string, object> { { "Property", "foo" } };
var eo = new ExpandoObject();
var eoColl = (ICollection<KeyValuePair<string, object>>)eo;

foreach (var kvp in dict)
{
    eoColl.Add(kvp);
}

dynamic eoDynamic = eo;

string value = eoDynamic.Property;