C#将List <t>转换为Object Properties

时间:2017-03-27 13:32:08

标签: c# list object converter

我正在寻找将List<Tag>项转换为Object属性的方法。
例如,我想转换每个代码,以便代码name的值是新的对象属性名称,而代码&#39; s value的值是对象属性&#39 ; s值。

e.g。
转换List[{"name":"KS_1","value":123},{"name":"KS_2","value":"ABC"}]
进入Object{KS_1: 123, KS_2: "ABC"}

未预定义对象名称和值 我使用的是.Net 3.5,因此我无法使用ExpandoObject

2 个答案:

答案 0 :(得分:1)

使用Linq的匿名类型可以解决问题如下。

var Result = new Object()
{
    KS_1: List[0].value,
    KS_2: List[1].value
};

但是,如果需要列表成员的变量列表,则必须使用反射。

答案 1 :(得分:1)

一种选择是使用反射。这是一个完成工作的扩展方法:

public T FromTags<T>(this List<Tag> tags)
    where T : new()
{
    var t = new T();

    var properties = typeof(T).GetProperties();

    foreach (var tag in tags)
    {
        var property = properties.SingleOrDefault(p => p.Name == tag.name);

        if (property != null)
        {
            property.SetValue(t, tag.value);
        }
    }

    return t;
}

你会这样称呼它:

public class MyThing
{
    public string SomeProperty { get; set; }
    public string AnotherProperty { get; set; }
}

var myThing = tags.FromTags<MyThing>();