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