【问题标题】:Dictionary<string, object> to object字典<string, object> 到对象
【发布时间】:2012-01-30 10:23:51
【问题描述】:

转换这本词典的最佳方法是什么:

Dictionary<string, object> person = new Dictionary<string, object>();
                            person.Add("ID", 1);
                            person.Add("Name", "Alex");

反对:

public class Person
{
public int ID{get;set;}
public string Name{get;set;}
}

?

【问题讨论】:

  • 查看此链接可能有助于回答您的问题blog.andreloker.de/post/2008/05/03/…
  • 我想从选择数据库查询中返回对象。
  • 我认为这里对 Dictionary 类存在误解。您似乎使字典的两个不同元素对应于一个语义对象。您需要的似乎是一个 Dictionary 对象,具有到 Person 对象的 int 映射。

标签: c# object dictionary


【解决方案1】:

如果您希望能够对任何对象执行此操作,则可以使用反射。假设字典中的值是适当的类型并且不需要转换:

static T GetObject<T>(Dictionary<string, object> dict)
    where T : new()
{
    var obj = new T();
    foreach (var property in typeof(T).GetProperties())
    {
        var args = new object[1];
        var setter = property.GetSetMethod(); // property has a public setter
        if (setter != null && dict.TryGetValue(property.Name, out args[0]))
            setter.Invoke(obj, args);
    }
    return obj;
}

然后使用它:

var alexDict = new Dictionary<string, object>
{
    { "ID", 1 },
    { "Name", "Alex" },
};
var alexPerson = GetObject<Person>(alexDict);

【讨论】:

    【解决方案2】:

    这是我的建议:

    var newPerson = new Person 
        { 
            ID = (int)person["ID"],
            Name = person["Name"].ToString()
        };
    

    这没有错误处理,并假设字段存在于字典中并填充了有效值!

    【讨论】:

      【解决方案3】:

      简单的方法:

      var person = new Person
      {
          Id = (int)dict["ID"],
          Name = (string)dict["Name"]
      }
      

      通用方式:使用反射。

      【讨论】:

        【解决方案4】:
        Person myPerson = new Person();
        myPerson.ID = (int)person["ID"];
        myPerson.Name = (string)person["Name"];
        

        不提供使用 int 强制转换的错误检查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-17
          • 2012-09-06
          • 1970-01-01
          相关资源
          最近更新 更多