我有User
班
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
和Dictionary
public Dictionary<string, object> models = new Dictionary<string, object>
{
{"Users[0].Id", 1},
{"Users[0].Name", "Rajib"},
{"Users[0].Email", "rajib@azr.com"},
{"Users[1].Id", 2},
{"Users[1].Name", "Ashiq"},
{"Users[1].Email", "azhiq@azr.com"},
{"Users[2].Id", 3},
{"Users[2].Name", "Zaman"},
{"Users[2].Email", "zaman@azr.com"},
};
现在我想将Dictionary<string, object> models
的值转换为List<User>
。
谁能建议我怎么做?
答案 0 :(得分:4)
你想做什么很奇怪,我认为你应该重新考虑你的设计。也许你可以用不同的方式来构建你的数据...... 但这就是你如何实现它:
按key
的第一部分对数据进行分组,为每个组指定不同的User
项目,并指定不同的User
对象。您可以使用反射将value
分配给每个正确的属性
var data = models.GroupBy(item => item.Key.Substring(0, item.Key.IndexOf(".")))
.Select(group => group.Aggregate(new User(), (user, item) =>
{
PropertyInfo propertyInfo = user.GetType().GetProperty(item.Key.Substring(item.Key.IndexOf(".") + 1));
propertyInfo.SetValue(user, Convert.ChangeType(item.Value, propertyInfo.PropertyType), null);
return user;
})).ToList();
答案 1 :(得分:1)
这样的事情对你有用。
var list = new List<User>();
for(var i = 0; i < models.Count/3; i++)
{
var user = new User();
user.Id = (int)models[string.Format("Users[{0}].Id", i)];
user.Name = models[string.Format("Users[{0}].Name", i)].ToString();
user.Email = models[string.Format("Users[{0}].Email", i)].ToString();
list.Add(user);
}
但是这种Dictionary