C# 如何转换字典<;字符串,对象>;列出<;T>;

C# 如何转换字典<;字符串,对象>;列出<;T>;,c#,.net,asp.net-mvc,dictionary,generics,C#,.net,Asp.net Mvc,Dictionary,Generics,我有一个用户类 public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } } 和一本字典 public Dictionary<string, object> models = new Dictionary<string, object> { {"Users[0].I

我有一个
用户

public class  User
{
   public int Id { get; set; }
   public string Name { get; set; }
   public string Email { get; set; }    
}
和一本
字典

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"},
};
公共字典模型=新字典
{
{“用户[0].Id”,1},
{“Users[0].Name”,“Rajib”},
{“用户[0]。电子邮件”rajib@azr.com"},
{“用户[1].Id”,2},
{“Users[1].Name”,“Ashiq”},
{“用户[1]。电子邮件”azhiq@azr.com"},
{“用户[2].Id”,3},
{“Users[2].Name”,“Zaman”},
{“用户[2]。电子邮件”zaman@azr.com"},
};
现在我想将
字典模型的值
转换为
列表

有人能建议我怎么做吗?

像这样的东西对你有用

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);
}
var list=newlist();
对于(变量i=0;i

但是有这样的
字典真的很奇怪

这样的东西对你有用

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"},
};
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);
}
var list=newlist();
对于(变量i=0;i

但是有这样的
字典真的很奇怪

你想做什么很奇怪,我认为你应该重新考虑你的设计。也许你可以用不同的方式来构建你的数据。。。
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"},
};
但这就是你实现它的方法:

键的第一部分对数据进行分组,指示不同的
用户
,然后为每个组投影一个不同的
用户
对象。您可以使用反射将
指定给每个正确的属性

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

您在场景中对C#代码片段/表达式(例如“Users[0].Id”)使用字符串非常奇怪。你真的必须首先使用这样一本字典吗?这太疯狂了。你不可能处于必须处理这件事的境地。如果你正在使用一些软件,实际上迫使你处理这个问题,那么你应该停止使用该软件。但可能发生的是,您完全误解了正在发生的事情。只需在POST方法中设置参数
IEnumerable
,它就会被正确绑定。我非常怀疑这一点。您说您正在“像我的示例一样将所有数据转换为字典”-这意味着您可以做其他事情,例如,如果您需要字符串表示,可以将其转换为JSON…@Ashiquzzaman“这是一个示例。类中除了ID之外没有其他属性”-在您的问题中,您将
Name
Email
作为类的属性。如果不是,那么你的问题就毫无用处了,因为你在这里得到的答案假设它们是属性,对你没有任何帮助。你在场景中使用字符串作为C代码片段/表达式(例如“Users[0].Id”)是非常奇怪的。你真的必须首先使用这样一本字典吗?这太疯狂了。你不可能处于必须处理这件事的境地。如果你正在使用一些软件,实际上迫使你处理这个问题,那么你应该停止使用该软件。但可能发生的是,您完全误解了正在发生的事情。只需在POST方法中设置参数
IEnumerable
,它就会被正确绑定。我非常怀疑这一点。您说您正在“像我的示例一样将所有数据转换为字典”-这意味着您可以做其他事情,例如,如果您需要字符串表示,可以将其转换为JSON…@Ashiquzzaman“这是一个示例。类中除了ID之外没有其他属性”-在您的问题中,您将
Name
Email
作为类的属性。如果他们不是,你的问题是完全无用的,因为你在这里得到的答案假设他们是财产,对你没有任何帮助。我会记住你的建议。实际上你的回答成功地解决了我的问题。谢谢。我会记住你的建议。实际上你的回答成功地解决了我的问题。谢谢。