Question

Je suis en train de construire une méthode qui extrait un objet de type DataRow d'un DataSet typé, puis retourne une chaîne dans format JSON des champs du DataRow (à utiliser dans un service Web).

En utilisant System.Reflection , je fais quelque chose comme ceci:

public string getJson(DataRow r)
    {
        Type controlType = r.GetType();
        PropertyInfo[] props = controlType.GetProperties();
        foreach (PropertyInfo controlProperty in props)
        {

        }
        return "";
    }

Ensuite, dans l'instruction foreach , j'itérerais tous les champs pour obtenir le nom et la valeur du champ et le formaterais en JSON.

Le problème est que lors de l'itération sur props (de type PropertyInfo [] ), j'obtiens des propriétés sur lesquelles je ne souhaite pas être itérées:

texte de remplacement http://img88.imageshack.us/img88/2001/datarowreflectionht0 .gif

Comme vous pouvez le voir sur l'image ci-dessus, je n'ai besoin que des champs compris entre 0 - 11 dans le tableau props , car il s'agit des "champs réels". de cette ligne typée particulière.

Ma question est donc la suivante: Comment puis-je obtenir uniquement les champs du DataRow typé, et pas les autres "métadonnées"?

[UPDATE avec la solution]

As Mehrdad Afshari suggéré, au lieu d'utiliser Reflection , j'utilise le tableau Table.Columns .

Voici la fonction terminée:

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() + "}";
}
Était-ce utile?

La solution

Pourquoi n'utilisez-vous pas la propriété row.Table.Columns au lieu de réflexion?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top