A volte capita di dover trasformare un oggetto in un dictionary del tipo chiave-valore, ad esempio quando lavoriamo con ASP.NET MVC, oppure per serializzare velocemente un oggetto in qualche altro formato.
Il modo più rapido per raggiungere questo scopo è quello di è creare un extension method che faccia il lavoro sporco via Reflection, così come mostrato nell'esempio.
public static Dictionary<string, object> TurnObjectIntoDictionary(this object data) { var attr = BindingFlags.Public | BindingFlags.Instance; var dict = new Dictionary<string, object>(); if (data != null) { foreach (var property in data.GetType().GetProperties(attr)) { if (property.CanRead) { dict.Add(property.Name, property.GetValue(data, null)); } } }. return dict; }
Il metodo prende in input l'oggetto e sfrutta la Reflection per prendere le proprietà publiche non statiche. Successivamente, cicla le proprietà e per ognuna che può essere letta (cioè che ha il getter impostato), aggiunge il nome come chiave del dictionary, e il valore della proprietà come valore dell'elemento nel dictionary. Infine, il metodo torna il dictionary popolato.
Questo metodo non prende in considerazione proprietà complesse come array e oggetti, ma può essere facilmente evoluto per farlo.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.