は<T>

2017-04-23 8 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]"}, 
}; 

は今、私はList<User>Dictionary<string, object> modelsの値を変換する必要があります。 誰も私にそのことを提案することはできますか?

+0

'" Users [0] .Id "'。それは実際には 'Dictionary'の文字列値ですか? –

+0

はい。これは実際には文字列値です@NikhilAgrawal – Ashiquzzaman

+4

あなたのシナリオでは、C#コードスニペット/式(例: "Users [0] .Id"など)の文字列の使用は非常に奇妙です。あなたは本当に最初にそのような辞書を使用する必要がありますか? – elgonzo

答えて

4

のこの種を持っていることは本当に不思議です。たぶん、あなたはあなたがあなたのデータ... を構築する方法とは異なる何かを行うことができますしかし、これは、あなたがそれを達成することができる方法です。

グループのデータをkeyの最初の部分で、各グループAの異なる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

申し訳ありません、編集のためにありがとうございます –

関連する問題