在进行C#接口开发时经常需要将数据集转换成json返回,下面介绍一种将DataTable数据转换成实体类,然后再转换成json的方法。
一、创建全病案类
/// <summary>
/// 全病案
/// </summary>
class Qba
{
/// <summary>
/// id
/// </summary>
public int ID { get; set; }
/// <summary>
/// 病案名称
/// </summary>
public string BAMC { get; set; }
/// <summary>
/// 名称
/// </summary>
public string WBMC { get; set; }
/// <summary>
/// 内容
/// </summary>
public string WBNR { get; set; }
}
二、工具类
/// <summary>
/// 将DataTable数据源转换成实体类
/// </summary>
/// <typeparam name="T">实体</typeparam>
public static class ToModel<T> where T : new()
{
/// <summary>
/// 将DataTable数据源转换成实体类
/// </summary>
public static List<T> ConvertToModel(DataTable dt)
{
List<T> ts = new List<T>();// 定义集合
foreach (DataRow dr in dt.Rows)
{
T t = new T();
PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性
foreach (PropertyInfo pi in propertys)
{
if (dt.Columns.Contains(pi.Name))
{
if (!pi.CanWrite) continue;
var value = dr[pi.Name];
if (value != DBNull.Value)
{
switch (pi.PropertyType.FullName)
{
case "System.Decimal":
pi.SetValue(t, decimal.Parse(value.ToString()), null);
break;
case "System.String":
pi.SetValue(t, value.ToString(), null);
break;
case "System.Int32":
pi.SetValue(t, int.Parse(value.ToString()), null);
break;
default:
pi.SetValue(t, value, null);
break;
}
}
}
}
ts.Add(t);
}
return ts;
}
}
三、调用
class Root
{
public List <Qba > qba { get; set; }
public Root(string syxh)
{
DataTable data = DataAccess.Access().GetTableByProcedure("存储名称",
new SqlParameter[]{
new SqlParameter("@唯一号",syxh)
});
qba = ToModel<Qba>.ConvertToModel(data);
}
}
四、将实体类转换成json字符串
Root root = new Root(syxh);
String jsonStr = JsonConvert.SerializeObject(root);