Pregunta

Actualmente estoy creando un método que toma un objeto que es del tipo DataRow de un DataSet escrito, y luego devuelve una cadena en formato JSON de los campos en DataRow (para usar en un servicio web).

Al usar System.Reflection , estoy haciendo algo como esto:

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

        }
        return "";
    }

Y luego, en la instrucción foreach , iteraría cada campo y obtendría el nombre y el valor del campo, y lo formatearía en JSON.


El problema es que al iterar sobre los props (de tipo PropertyInfo [] ), obtengo propiedades sobre las que no quiero que se repitan:

texto alternativo http://img88.imageshack.us/img88/2001/datarowreflectionht0 .gif

Como puede ver en la imagen de arriba, solo necesito los campos que van desde 0 - 11 en la matriz props , porque esos son los 'campos reales' de esta fila escrita en particular.

Entonces, mi pregunta es: ¿Cómo puedo obtener los campos de Typed DataRow solamente, y no los otros 'metadatos'?


[ACTUALIZAR con la solución]

Como Mehrdad Afshari sugerido, en lugar de usar Reflection , estoy usando la matriz Table.Columns .

Aquí está la función completada:

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() + "}";
}
¿Fue útil?

Solución

¿Por qué no utiliza la propiedad row.Table.Columns en lugar de la reflexión?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top