将字典转换为匿名对象

3

我有一个字典

Dictionary<string, object> dict;

我可以通过输入来获取它的值。

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

字典是序列化的JSON结果。
serializer.Deserialize<Dictionary<string, object>>(HttpContext.Current.Request["JSON"]);

我想知道是否有一种方法将其转换为对象,这样我就可以输入类似以下的内容:
string foo = dict.foo;

谢谢

1个回答

2
如果您不知道字典的确切成员,可以使用dynamic获取漂亮的语法,如下所示。但是,如果您知道字典的成员和类型,那么您可以创建自己的类并自行进行转换。可能存在一个自动执行此操作的框架。
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 - Stefan Paul Noack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接