将字典转换为匿名对象

时间:2011-12-29 11:12:54

标签: c# asp.net json

我有一本字典

Dictionary<string, object> dict;

我通过输入

从中获取价值
string foo = dict["foo"].ToString();

字典是序列化的JSON结果。

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

我想知道如果他们将它转换为对象的方式,所以我可以输入类似的内容:

string foo = dict.foo;

由于

1 个答案:

答案 0 :(得分: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
        }
    }
}