字典<字符串、对象>到对象
本文关键字:对象 字符串 字典 | 更新日期: 2023-09-27 18:19:08
转换此字典的最佳方法是什么:
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;}
}
?
这是我
的建议:
var newPerson = new Person
{
ID = (int)person["ID"],
Name = person["Name"].ToString()
};
这没有错误处理,并且假设字段存在于字典中并填充了有效值!
如果您希望能够对任何对象执行此操作,则可以使用反射。 假设字典中的值是适当的类型并且不需要转换:
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);
Person myPerson = new Person();
myPerson.ID = (int)person["ID"];
myPerson.Name = (string)person["Name"];
不提供对 int 强制转换的错误检查。
简单的方法:
var person = new Person
{
Id = (int)dict["ID"],
Name = (string)dict["Name"]
}
通用方法:使用反射。