我目前正在构建一个方法,该方法从类型化的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。


问题在于,当迭代 props (类型为 PropertyInfo [] )时,我得到了我不想迭代的属性:

替代文字http://img88.imageshack.us/img88/2001/datarowreflectionht0 .gif注意

从上图中可以看出,我只需要 props 数组中 0 - 11 的字段,因为那些是'真实字段'这个特殊类型的行。

所以我的问题是,如何才能获取Typed DataRow的字段,而不是其他'元数据'?


[使用解决方案更新]

Mehrdad Afshari 建议,我使用的是 Table.Columns 数组,而不是使用 Reflection

这是完成的功能:

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 属性而不是反射?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top