Frage

Ich bin derzeit der Aufbau eine Methode, die ein Objekt übernimmt, die von einem typisierten DataSet vom Typ DataRow ist, und dann eine Zeichenfolge in JSON Format der Felder in der DataRow (zur Verwendung in einem Web-Service).

Mit dem System.Reflection verwenden, ich bin so etwas wie dies zu tun:

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

        }
        return "";
    }

Und dann in der foreach Aussage, würde ich jedes Feld durchlaufen und die Feldnamen und Wert erhalten, und formatieren Sie es in JSON.


Das Problem ist, dass, wenn über die props (vom Typ PropertyInfo[]) iteriert, erhalte ich Eigenschaften, die ich will nicht iteriert werden:

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

Wie Sie aus dem obigen Bild sehen können, ich brauche nur die Felder, die von 0 - 11 im props Array-Bereich, denn das ist die ‚realen Felder‘ dieses besonderes typisierte Reihe sind.

Meine Frage ist also, Wie kann ich die Felder der typisierten DataRow erhalten nur, und nicht die anderen ‚Metadaten‘?


[UPDATE mit Lösung]

Wie Mehrdad Afshari vorgeschlagen, anstelle von Reflection verwenden, ich die Table.Columns Array verwenden.

Hier ist die fertige Funktion:

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() + "}";
}
War es hilfreich?

Lösung

Warum nicht Sie verwenden row.Table.Columns Eigenschaft statt Reflexion?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top