C# 반사 : 타이핑 된 데이터 세트에서 Datarow의 필드를 가져옵니다.
-
08-07-2019 - |
문제
나는 현재 유형의 객체를 취하는 메소드를 구축하고 있습니다. DataRow
입력 된 데이터 세트에서 문자열을 반환합니다. 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[]
), 나는 반복되고 싶지 않은 속성을 얻고있다 :
Alt Text http://img88.imageshack.us/img88/2001/datarowreflectionht0.gif
위의 이미지에서 볼 수 있듯이 범위의 필드 만 필요합니다. 0 - 11
에서 props
배열은이 특정 유형 행의 '실제 필드'이기 때문에 배열.
그래서 내 질문은 다른 '메타 데이터'가 아니라 타이핑 된 데이터 러의 필드 만 얻을 수있는 방법은 무엇입니까?
솔루션으로 업데이트
처럼 Mehrdad Afshari 사용하는 대신 제안되었습니다 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
반사 대신 속성?
제휴하지 않습니다 StackOverflow