そこIEnumerable<KeyValuePair<string,string>>
から、理想的には、キーをプロパティ名として、値をプロパティ値として持つ匿名オブジェクトが必要です。
私はさまざまな選択式(コンパイルさえされていません...)と使用するアプローチExpandoObject
(以下を参照)を試しましたが、成功しませんでした。これを行う良い方法はありますか?可能であれば、コレクションに対する余分な明示的な繰り返しを避けたいと思います (つまり、ある種の LINQ ステートメントですべてを行います)。
これは私がこれまでに試したことです。私がやろうとしていることも明確になることを願っています:
var kvps = getProps(); // returns IEnumerable<KeyValuePair<string,string>>
dynamic o = new ExpandoObject();
foreach (var kvp in kvps)
{
o.Add(kvp);
}
これはコンパイル時には問題ありませんが、実行時に'System.Dynamic.ExpandoObject' に 'Add' の定義が含まれていないというYSODが表示されます。インスタンス化されてからメソッドが追加された場合。奇妙なことに、ExpandoObject の MSDN ドキュメント ページには、いくつかの「明示的に実装されたインターフェイス メソッド」の 1 つとしてリストされています。o
.Add()
.Add()
これを動的オブジェクトに入れる必要はありません。キーと値のペアのキーと値に従って、プロパティ名と値を持つものを取得する必要があるだけです。
更新:うーん、これは恥ずかしいです。これもXY問題の一種であることがわかりました。
Json(data)
コントローラーに戻るだけで、ASP.NET MVC の組み込み機能を使用して、これを JSON にレンダリングしようとしています。答えはすべて、私が最初に尋ねたことを実行するのに非常にうまく機能しましたが、このオブジェクトを渡すと、data
まだ欲しいものが得られません:
// What I get:
[
{ Key: 'firstkey', Value: 'FirstValue' },
{ Key: 'secondKey', Value: 'secondValue' }
]
// What I want:
{ firstKey: 'FirstValue', secondKey: 'secondValue' }
どうやら、ExpandoObject
関連するプロパティが追加された はそれをカットしませんでした-レンダリングする前に辞書にキャストされました...