转换字典匿名对象
问题描述:
我有一本字典转换字典匿名对象
Dictionary<string, object> dict;
而且我通过键入
string foo = dict["foo"].ToString();
本词典是一个序列化JSON结果从它那里得到的值。
serializer.Deserialize<Dictionary<string, object>>(HttpContext.Current.Request["JSON"]);
什么,我想知道,如果thers的方式将其转换为一个对象,这样我就可以输入类似:
string foo = dict.foo;
感谢
答
如果你不知道精确的字典成员可以使用dynamic
来获得如下所示的漂亮语法。但是,如果您知道字典和类型的成员,请自行转换then you could create your own class。可能存在一个框架来自动执行此操作。
using System;
using System.Collections.Generic;
using System.Text;
using System.Dynamic;
namespace DynamicTest
{
public class DynamicDictionary : DynamicObject
{
Dictionary<string, object> dict;
public DynamicDictionary(Dictionary<string, object> dict)
{
this.dict = dict;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
dict[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return dict.TryGetValue(binder.Name, out result);
}
}
class Program
{
static void Main(string[] args)
{
dynamic foo = new DynamicDictionary(new Dictionary<string, object> { { "test1", 1 } });
foo.test2 = 2;
Console.WriteLine(foo.test1); // Prints 1
Console.WriteLine(foo.test2); // Prints 2
}
}
}
该框架确实存在并被称为[Automapper](http://automapper.org/) – 2011-12-29 11:52:58