質問

現在、型指定されたDataSetから DataRow 型のオブジェクトを取得し、 JSON DataRowのフィールドの形式(Webサービスで使用)。

System.Reflection を使用して、次のようなことをしています:

public string getJson(DataRow r)
    {
        Type controlType = r.GetType();
        PropertyInfo[] props = controlType.GetProperties();
        foreach (PropertyInfo controlProperty in props)
        {

        }
        return "";
    }

そして、 foreach ステートメントで、すべてのフィールドを繰り返してフィールド名と値を取得し、JSONにフォーマットします。


問題は、( PropertyInfo [] 型の) props を繰り返し処理するときに、繰り返し処理したくないプロパティを取得していることです。

代替テキストhttp://img88.imageshack.us/img88/2001/datarowreflectionht0 .gif

上の画像からわかるように、 props 配列の 0-11 の範囲のフィールドのみが必要です。これらは「実際のフィールド」だからですこの特定のタイプの行の。

だから私の質問は、他の「メタデータ」ではなく、Typed DataRowのフィールドのみを取得するにはどうすればよいですか?


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

As 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 プロパティを使用しませんか?

scroll top