Hľadám spôsob, ako konvertovať List<Tag>
položky do Object
Vlastnosti.
Napríklad chcem previesť každú značku tak, aby hodnota značky bola name
je nový názov vlastnosti objektu a hodnota značky value
je hodnota vlastnosti objektu.
napr.
premeniť List
: [{"name":"KS_1","value":123},{"name":"KS_2","value":"ABC"}]
Do Object
: {KS_1: 123, KS_2: "ABC"}
Názvy objektov a hodnoty nie sú vopred definované.
Používam .Net 3.5, takže nemôžem používať ExpandoObject
odpovede:
1 pre odpoveď č. 1Problém je možné vyriešiť použitím anonymného typu pomocou programu Linq nasledujúcim spôsobom.
var Result = new Object()
{
KS_1: List[0].value,
KS_2: List[1].value
};
Ak je však vyžadovaný variabilný zoznam členov zoznamu, musí sa použiť reflexia.
1 pre odpoveď č. 2
Jednou z možností je použiť reflexiu. Tu je metóda rozšírenia, ktorá robí túto prácu:
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;
}
A nazvali by ste to takto:
public class MyThing
{
public string SomeProperty { get; set; }
public string AnotherProperty { get; set; }
}
var myThing = tags.FromTags<MyThing>();