2011-12-29 89 views
2

我有一本字典轉換字典匿名對象

Dictionary<string, object> dict; 

而且我通過鍵入

string foo = dict["foo"].ToString(); 

本詞典是一個序列化JSON結果從它那裏得到的值。

serializer.Deserialize<Dictionary<string, object>>(HttpContext.Current.Request["JSON"]); 

什麼,我想知道,如果thers的方式將其轉換爲一個對象,這樣我就可以輸入類似:

string foo = dict.foo; 

感謝

回答

2

如果你不知道精確的字典成員可以使用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