現在、型指定された 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() + "}";
}