Отражение C #: получение полей DataRow из типизированного набора данных
-
08-07-2019 - |
Вопрос
В настоящее время я создаю метод, который берет объект типа 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
вместо отражения?