Отражение C #: получение полей DataRow из типизированного DataSet - PullRequest
2 голосов
/ 10 января 2009

В настоящее время я создаю метод, который берет объект типа DataRow из типизированного DataSet, а затем возвращает строку в формате JSON полей в DataRow (для использования в Веб-сервис).

Используя System.Reflection, я делаю что-то вроде этого:

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

        }
        return "";
    }

А затем в операторе foreach я бы перебрал каждое поле, получил бы имя и значение поля и отформатировал бы его в JSON.


Проблема в том, что при итерации по props (типа PropertyInfo[]) я получаю свойства, которые не хочу итерировать по:

альтернативный текст http://img88.imageshack.us/img88/2001/datarowreflectionht0.gif

Как видно из приведенного выше изображения, мне нужны только поля размером от 0 - 11 в массиве props, потому что это "реальные поля" этой конкретной типизированной строки.

Итак, мой вопрос, Как я могу получить только поля Typed DataRow, а не другие «метаданные»?


[ОБНОВЛЕНИЕ с решением]

Как и Мехрдад Афшари предложил, вместо использования Reflection, я использую массив Table.Columns.

Вот выполненная функция:

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() + "}";
}

1 Ответ

11 голосов
/ 10 января 2009

Почему бы вам не использовать row.Table.Columns свойство вместо отражения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...