如何将对象数组转换成DataSet

在使用asp.net 2.0 beta 2 开发项目的过程中,碰到了将对象数组绑定到GridView的数据源上,但是使用排序的时候,却发现GridView并不提供对对象数组的支持,而在微软的官方网站上我们可以看到GridView的排序只有当数据源是DataSet的时候才支持,所以对于某些采用了O/R映射的项目或者返回的数据源是对象数组的项目中,就需要考虑提供将对象数组转换为DataSet的方法了,否则就要自己来手工来实现每一个GridView的排序,降低了开发效率。
  在微软的.net开发类库中,我们找不到现成转换方法,所以就需要考虑自行开发这个功能了,然而实现起来并不是很复杂,其中要用到的主要技术就是反射。利用反射,我们能够获取该对象数组中对象的每一个属性,包括其名称、类型,然后利用这些信息来创建DataSet中数据表的Schema,当创建完成以后,将该对象数组的每一个对象的属性数据复制到刚才创建的数据表中,这样就很简单的完成了该功能的实现,还是用代码来说的更清楚些:
文件:objectArrayToDataSet.cs

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Reflection;
    public class ArrayToDataSet
    {
        public static DataSet ObjectArrayToDataSet(object[] objArr)
        {
            if (objArr.Length == 0)
                return null;
            DataSet ds = CreateDataSet(objArr[0].GetType());
            ds = FillDataSet(ds, objArr);
            return ds;
        }

        public static DataSet CreateDataSet(Type t)
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            ds.Tables.Add(dt);

            PropertyInfo[] pis = t.GetProperties();
            foreach (PropertyInfo pi in pis)
            {
                DataColumn dc = new DataColumn(pi.Name, pi.PropertyType);
                dt.Columns.Add(dc);
            }
            return ds;
        }

        public static DataSet FillDataSet(DataSet ds, object[] objArr)
        {
            DataColumnCollection dcs = ds.Tables[0].Columns;
            Type t = objArr[0].GetType();
            foreach (object obj in objArr)
            {
                DataRow dr = ds.Tables[0].NewRow();
                for (int i = 0; i < dcs.Count; i++)
                {
                    dr[i] = t.InvokeMember(dcs[i].ColumnName, BindingFlags.GetProperty, null, obj, null);
                }
                ds.Tables[0].Rows.Add(dr);
            }
            return ds;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Delphi XE 版本中,可以使用 TDataSetProvider 和 TClientDataSet 组件来将 JSON 数据转换为 DataSet。 以下是一个简单的例子,演示如何将 JSON 数据转换为 DataSet: ```delphi uses System.JSON, Data.DB, Datasnap.DBClient, Datasnap.Provider; procedure JSONToDataSet(const jsonStr: string; const dataSet: TDataSet); var json: TJSONObject; data: TJSONArray; row: TJSONObject; i: Integer; begin json := TJSONObject.ParseJSONValue(jsonStr) as TJSONObject; if json <> nil then begin data := json.GetValue('data') as TJSONArray; if data <> nil then begin dataSet.DisableControls; try dataSet.Open; for i := 0 to data.Count - 1 do begin row := data.Items[i] as TJSONObject; dataSet.Append; try // 将 JSON 中的数据转换为 DataSet 中的字段值 dataSet.FieldByName('name').AsString := row.GetValue('name').Value; dataSet.FieldByName('value').AsString := row.GetValue('value').Value; dataSet.Post; except dataSet.Cancel; raise; end; end; finally dataSet.EnableControls; end; end; end; end; ``` 在上面的例子中,首先使用 TJSONObject.ParseJSONValue 方法将 JSON 字符串解析为 TJSONObject 对象,然后使用 GetValue 方法获取 JSON 中的具体值。接着,循环遍历 JSON 数组中的每一行数据,将其转换为 DataSet 中的字段值,并添加到 DataSet 中。 需要注意的是,在将 JSON 数据转换为 DataSet 时,需要保证 JSON 数据的结构与 DataSet 的结构一致。同时,还需要进行错误处理和数据安全处理,以应对无效的 JSON 数据或解析错误等情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值