我需要将通用键值列表映射到我的模型类。
下面是KeyValues
类。
public class KeyValues
{
public string Key { get; }
public string Value { get; set; }
}
使用以下值将其作为IList<KeyValues>
中的输入
Key = "SystemId"
Value = "12"
Key = "SystemName"
Value = "LTPVBN21"
Key = "Location"
Value = "NJ2"
我想将此映射到下面的SystemInformation
类属性。基于Key需要在相应的属性中设置值。
public class SystemInformation
{
public string SystemId { get; set; }
public string SystemName { get; set; }
public string Location { get; set; }
}
现在,我要循环IList<KeyValues
>对象,并在模型中设置比较键的值。
我是否可以使用Automapper或其他任何选项来实现此目的,因为我必须对多个模型执行类似的操作。
答案 0 :(得分:0)
您需要在此处使用反射,这将类似于以下内容:
SystemInformation information = new SystemInformation();
foreach(var item in values)
{
information.GetType()
.GetProperty(item.Key)
.SetValue(information, item.Value);
}
请参阅工作中的DEMO Fiddle。
我专门使用了 SystemInformation 对象,但是它可以是任何对象,您可以调用GetType()
来获取类型详细信息,然后通过调用反射方法进一步进行操作。
希望有帮助。
答案 1 :(得分:0)
using System.Collections.Generic;
using System.Reflection;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
List<KeyValues> kv = new List<KeyValues>();
kv.Add(new KeyValues() { Key = "SystemId", Value = "12" });
kv.Add(new KeyValues() { Key = "SystemName", Value = "LTPVBN21" });
kv.Add(new KeyValues() { Key = "Location", Value = "NJ2" });
SystemInformation si = new SystemInformation();
foreach (KeyValues k in kv)
{
PropertyInfo pi = typeof(SystemInformation).GetProperty(k.Key);
pi.SetValue(si, k.Value);
}
}
public class KeyValues
{
public string Key { get; set; }
public string Value { get; set; }
}
public class SystemInformation
{
public string SystemId { get; set; }
public string SystemName { get; set; }
public string Location { get; set; }
}
}
}