/ / C # Prevod zoznamu <T> na vlastnosti objektu - c #, zoznam, objekt, prevodník

C # Konvertovať zoznam <T> na vlastnosti objektu - c #, list, objekt, konvertor

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ď č. 1

Problé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>();