2017-04-23 73 views
0

我有一個User如何轉換詞典<字符串,對象>列出<T>

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", "[email protected]"}, 
    {"Users[1].Id", 2}, 
    {"Users[1].Name", "Ashiq"}, 
    {"Users[1].Email", "[email protected]"}, 
    {"Users[2].Id", 3}, 
    {"Users[2].Name", "Zaman"}, 
    {"Users[2].Email", "[email protected]"}, 
}; 

現在我想的Dictionary<string, object> models值轉換爲List<User>。 任何人都可以建議我該怎麼做?

+0

'「Users [0] .Id」'。這實際上是'Dictionary'中的字符串值嗎? –

+0

是的。這實際上是字符串值@NikhilAgrawal – Ashiquzzaman

+4

在您的場景中,您對C#代碼片段/表達式(例如「Users [0] .Id」)的字符串使用情況非常奇怪。你真的必須首先使用這樣的字典嗎? – elgonzo

回答

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(); 
+2

我會記住你的建議。其實你的回答成功解決了我的問題。謝謝。 – Ashiquzzaman

+0

@Ashiquzzaman - 歡迎您:) –

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

+0

請在發帖前檢查您的代碼 –

+1

對不起,謝謝編輯 –

相關問題