2

現在、型指定された DataSet から型のオブジェクトを取得し、DataRow のフィールドのJSONDataRow形式の文字列を返すメソッドを構築しています (Web サービスで使用するため)。

を使用して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 のみのフィールドを取得するにはどうすればよいですか?


[ソリューションで更新]

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() + "}";
}
4

1 に答える 1

11

row.Table.Columnsリフレクションの代わりにプロパティを使用しないのはなぜですか?

于 2009-01-10T14:48:44.753 に答える