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

Solução

Por que você não usar a propriedade row.Table.Columns em vez de reflexão?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top