2009-01-10 8 views
2

Je suis en train de construire une méthode qui prend un objet de type DataRow à partir d'un DataSet typé, puis retourne une chaîne au format JSON des champs dans le DataRow (pour une utilisation dans un service Web).C# Réflexion: Obtention des champs d'un DataRow à partir d'un DataSet typé

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 ""; 
    } 

Et puis dans la déclaration foreach, je serais itérer tous les domaines et obtenir le nom du champ et de la valeur, et le formater en JSON.


Le problème est que lorsque vous parcourez la props (de type PropertyInfo[]), je reçois des propriétés que je ne veux pas être itéré:

alt text http://img88.imageshack.us/img88/2001/datarowreflectionht0.gif

Comme vous pouvez le voir l'image ci-dessus, j'ai seulement besoin des champs qui vont de 0 - 11 dans le tableau props, parce que ce sont les 'champs réels' de cette ligne tapée particulière.

Donc, ma question est, Comment puis-je obtenir les champs de la DataRow typée seulement, et pas les autres «métadonnées»?


[Mise à jour avec la solution]

Comme suggéré Mehrdad Afshari, au lieu d'utiliser Reflection, je me sers du 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() + "}"; 
} 

Répondre

11

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

Questions connexes