문제

나는 현재 유형의 객체를 취하는 메소드를 구축하고 있습니다. 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 반사 대신 속성?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top