映射通用值列表时出现问题

时间:2018-08-10 14:50:24

标签: c# .net automapper

我需要将通用键值列表映射到我的模型类。

下面是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或其他任何选项来实现此目的,因为我必须对多个模型执行类似的操作。

2 个答案:

答案 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; }
    }
}

}