Edited at

RouteValueDictionaryクラスで匿名型を辞書に変換する

More than 3 years have passed since last update.

匿名型のオブジェクトを受け取るメソッドを書く必要があって、objectで受け取るとプロパティにアクセスするにはリフレクション使わないといけないのかな、だとしたら面倒だなぁと思ってたら、system.web.routingにあるRouteValueDictionaryを使うと簡単にIDictionary<string, object>に変換できると知ったのでメモ。

使い方は、RouteValueDictionaryのコンストラクタに匿名型のオブジェクトを渡すだけ。簡単。

MSDN:RouteValueDictionary クラス


using System;
using System.Web.Routing;

class Program
{
// 匿名型のオブジェクトを受け取り、辞書に変換する
static void Func(object anonymousObj)
{
var dict = new RouteValueDictionary(anonymousObj);
foreach (var kv in dict)
{
Console.WriteLine($"{kv.Key} => {kv.Value}");
}
}

static void Main(string[] args)
{
Func(new { item1 = "aaa", item2 = 123 });
Console.ReadLine();
}
}