Reflexión de C #: Obtener los campos de una DataRow de un Dataset escrito
-
08-07-2019 - |
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() + "}";
}
Solución
¿Por qué no utiliza la propiedad row.Table.Columns
en lugar de la reflexión?