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() + "}";
}
È stato utile?

Soluzione

Perché non usi la proprietà row.Table.Columns invece di reflection?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top