Отражение C #: получение полей DataRow из типизированного набора данных

StackOverflow https://stackoverflow.com/questions/431050

Вопрос

В настоящее время я создаю метод, который берет объект типа 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.

<Ч>

Проблема в том, что при итерации по реквизитам (типа 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() + "}";
}
Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top