C # reflexão: Obtendo os campos de um DataRow de um DataSet
-
08-07-2019 - |
Pergunta
Atualmente, estou construindo um método que leva um objeto que é do tipo DataRow
de um DataSet digitado e, em seguida, retornar uma string em formato dos campos no DataRow JSON (para uso em um web Service).
Ao usar System.Reflection
, eu estou fazendo algo parecido com isto:
public string getJson(DataRow r)
{
Type controlType = r.GetType();
PropertyInfo[] props = controlType.GetProperties();
foreach (PropertyInfo controlProperty in props)
{
}
return "";
}
E, em seguida, na demonstração foreach
, eu iria iterar cada campo e obter o nome do campo e valor, e formatá-lo em JSON.
O problema é que quando a iteração sobre o props
(do tipo PropertyInfo[]
), estou recebendo propriedades que eu não quero ser iterado:
alt texto http://img88.imageshack.us/img88/2001/datarowreflectionht0 .gif
Como você pode ver na imagem acima, eu só preciso os campos que vão desde 0 - 11
na matriz props
, porque esses são os 'campos reais' desta linha digitada particular.
Então, minha pergunta é, Como posso obter os campos de apenas o digitado DataRow, e não o outro 'metadados'?
[UPDATE com Solution]
Como Mehrdad Afshari sugeriu, em vez de usar Reflection
, estou usando a matriz Table.Columns
.
Aqui é a função concluída:
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() + "}";
}
Solução
Por que você não usar a propriedade row.Table.Columns
em vez de reflexão?