Riflessione C #: ottenere i campi di un DataRow da un DataSet tipizzato
-
08-07-2019 - |
Domanda
Attualmente sto costruendo un metodo che prende un oggetto di tipo DataRow
da un DataSet tipizzato e quindi restituendo una stringa in formato JSON dei campi nel DataRow (per l'uso in un servizio Web).
Utilizzando System.Reflection
, sto facendo qualcosa del genere:
public string getJson(DataRow r)
{
Type controlType = r.GetType();
PropertyInfo[] props = controlType.GetProperties();
foreach (PropertyInfo controlProperty in props)
{
}
return "";
}
E poi nell'istruzione foreach
, ripeterei ogni campo e otterrei il nome e il valore del campo, e lo formattare in JSON.
Il problema è che durante l'iterazione su oggetti di scena
(di tipo PropertyInfo []
), ottengo proprietà sulle quali non voglio ripetere l'iterazione:
alt text http://img88.imageshack.us/img88/2001/datarowreflectionht0 .gif
Come puoi vedere dall'immagine sopra, ho solo bisogno dei campi che vanno da 0 - 11
nell'array props
, perché quelli sono i "campi reali" di questa particolare riga digitata.
Quindi la mia domanda è, Come posso ottenere solo i campi del Typed DataRow e non gli altri 'metadati'?
[AGGIORNAMENTO con soluzione]
As Mehrdad Afshari suggerito, invece di usare Reflection
, sto usando l'array Table.Columns
.
Ecco la funzione completata:
public string GetJson(DataRow r)
{
int index = 0;
StringBuilder json = new StringBuilder();
foreach (DataColumn item in r.Table.Columns)
{
json.Append(String.Format("\"{0}\" : \"{1}\"", item.ColumnName, r[item.ColumnName].ToString()));
if (index < r.Table.Columns.Count - 1)
{
json.Append(", ");
}
index++;
}
return "{" + json.ToString() + "}";
}
Soluzione
Perché non usi la proprietà row.Table.Columns
invece di reflection?