C#リフレクション:型指定されたDataSetからDataRowのフィールドを取得する
-
08-07-2019 - |
質問
現在、型指定された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
プロパティを使用しませんか?
所属していません StackOverflow