我目前正在构建一个方法,该方法DataRow
从类型化的DataSet 中获取类型的对象,然后返回DataRow中字段的JSON格式的字符串(用于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[]
)时,我得到的属性我不想被迭代:
alt text 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() + "}"; }
Mehrdad Afsh.. 11
你为什么不使用row.Table.Columns
属性而不是反射?
你为什么不使用row.Table.Columns
属性而不是反射?