转换字典匿名对象

问题描述:

我有一本字典转换字典匿名对象

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 
     } 
    } 
} 
+1

该框架确实存在并被称为[Automapper](http://automapper.org/) – 2011-12-29 11:52:58