簡體   English   中英

如何轉換字典 <string, object> 列出 <T>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM