[英]How to convert Dictionary<string, object> to List<T>
我有一個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>
。 誰能建議我該怎么做?
您想做什么很奇怪,我認為您應該重新考慮您的設計。 也許您可以在構建數據的方式上做一些不同的事情……但這是您可以實現的方式:
通過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();
這樣的事情將為您工作。
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
真的很奇怪
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.