我正在寻找将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
答案 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>();