您的位置:首页 > 其它

DataSet 和 List<T> 相互 转换

2012-12-21 14:47 393 查看
/// <summary>
/// 实体类转换成DataTable
/// 调用示例:DataTable dt= FillDataTable(Entitylist.ToList());
/// </summary>
/// <param name="modelList">实体类列表</param>
/// <returns></returns>
public static  DataTable FillDataTable<T>(List<T> modelList)
{
if (modelList == null || modelList.Count == 0)
{
return null;
}
DataTable dt = CreateData(modelList[0]);//创建表结构

foreach (T model in modelList)
{
DataRow dataRow = dt.NewRow();
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
{
dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
}
dt.Rows.Add(dataRow);
}
return dt;
}
/// <summary>
/// 根据实体类得到表结构
/// </summary>
/// <param name="model">实体类</param>
/// <returns></returns>
private static DataTable CreateData<T>(T model)
{
DataTable dataTable = new DataTable(typeof(T).Name);
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
{
if (propertyInfo.Name != "CTimestamp")//些字段为oracle中的Timesstarmp类型
{
dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
}
else
{
dataTable.Columns.Add(new DataColumn(propertyInfo.Name, typeof(DateTime)));
}
}
return dataTable;
}

/// <summary>
/// 将dt转化成Json数据 格式如 table[{id:1,title:'体育'},id:2,title:'娱乐'}]
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DT2JSON<T>(List<T> dt)
{
return DT2JSON(dt, 0, "recordcount", "table");
}
public static string DT2JSON<T>(List<T> dt, int fromCount)
{
return DT2JSON(dt, fromCount, "recordcount", "table");
}
/// <summary>
/// 将dt转化成Json数据
/// </summary>
/// <param name="dt"></param>
/// <param name="fromCount"></param>
/// <param name="totalCountStr"></param>
/// <param name="tbname"></param>
/// <returns></returns>
public static string DT2JSON<T>(List<T> dt, int fromCount, string totalCountStr, string tbname)
{
return DT2JSON(dt, fromCount, "recordcount", "table", true);
}
/// <summary>
/// 将dt转化成Json数据
/// </summary>
/// <param name="dt"></param>
/// <param name="fromCount"></param>
/// <param name="totalCountStr"></param>
/// <param name="tbname"></param>
/// <returns></returns>
public static string DT2JSON<T>(List<T> dt, int fromCount, string totalCountStr, string tbname, bool formatData)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append(totalCountStr + ":" + dt.Count + "," + tbname + ": [");
//T _t = (T)Activator.CreateInstance(typeof(T));
//System.Reflection.PropertyInfo[] propertys = _t.GetType().GetProperties();
int count2 = 0;
foreach (T model in dt)
{
if (count2 > 0)
jsonBuilder.Append(",");
jsonBuilder.Append("{");
jsonBuilder.Append("no:" + (fromCount + count2 + 1) + ",");
int count = 0;
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
{
if (count > 0)
{
jsonBuilder.Append(",");
}
string temp = string.Empty;
object obj = propertyInfo.GetValue(model, null);
if (obj != null)
temp = obj.ToString();
jsonBuilder.Append(propertyInfo.Name.ToLower() + ": '" +
temp.Replace("\\", "\\\\").Replace("\'", "\\\'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>") + "'");
count++;

}
jsonBuilder.Append("}");
count2++;
}
jsonBuilder.Append("]");
return jsonBuilder.ToString();

}

/// <summary>
/// 将dt转化成Json数据 格式如 table[{id:1,title:'体育'},id:2,title:'娱乐'}]
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DT2JSON(DataTable dt)
{
return DT2JSON(dt, 0, "recordcount", "table");
}
public static string DT2JSON(DataTable dt, int fromCount)
{
return DT2JSON(dt, fromCount, "recordcount", "table");
}
/// <summary>
/// 将dt转化成Json数据
/// </summary>
/// <param name="dt"></param>
/// <param name="fromCount"></param>
/// <param name="totalCountStr"></param>
/// <param name="tbname"></param>
/// <returns></returns>
public static string DT2JSON(DataTable dt, int fromCount, string totalCountStr, string tbname)
{
return DT2JSON(dt, fromCount, "recordcount", "table", true);
}
/// <summary>
/// 将dt转化成Json数据
/// </summary>
/// <param name="dt"></param>
/// <param name="fromCount"></param>
/// <param name="totalCountStr"></param>
/// <param name="tbname"></param>
/// <returns></returns>
public static string DT2JSON(DataTable dt, int fromCount, string totalCountStr, string tbname, bool formatData)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append(totalCountStr + ":" + dt.Rows.Count + "," + tbname + ": [");
for (int i = 0; i < dt.Rows.Count; i++)
{
if (i > 0)
jsonBuilder.Append(",");
jsonBuilder.Append("{");
jsonBuilder.Append("no:" + (fromCount + i + 1) + ",");
for (int j = 0; j < dt.Columns.Count; j++)
{
if (j > 0)
jsonBuilder.Append(",");

jsonBuilder.Append(dt.Columns[j].ColumnName.ToLower() + ": '" + dt.Rows[i][j].ToString().Replace("\\", "\\\\").Replace("\'", "\\\'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>") + "'");
}
jsonBuilder.Append("}");
}
jsonBuilder.Append("]");
return jsonBuilder.ToString();

}
/// <summary>
/// 将DataTable转换为list
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> DT2List<T>(DataTable dt)
{
if (dt == null)
return null;
List<T> result = new List<T>();
for (int j = 0; j < dt.Rows.Count; j++)
{
T _t = (T)Activator.CreateInstance(typeof(T));
System.Reflection.PropertyInfo[] propertys = _t.GetType().GetProperties();
foreach (System.Reflection.PropertyInfo pi in propertys)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
// 属性与字段名称一致的进行赋值
if (pi.Name.ToLower().Equals(dt.Columns[i].ColumnName.ToLower()))
{
if (dt.Rows[j][i] != DBNull.Value)
{
if (pi.PropertyType.ToString() == "System.Int32")
{
pi.SetValue(_t, Int32.Parse(dt.Rows[j][i].ToString()), null);
}
if (pi.PropertyType.ToString() == "System.DateTime")
{
pi.SetValue(_t, Convert.ToDateTime(dt.Rows[j][i].ToString()), null);
}
if (pi.PropertyType.ToString() == "System.String")
{
pi.SetValue(_t, dt.Rows[j][i].ToString(), null);
}
if (pi.PropertyType.ToString() == "System.Boolean")
{
pi.SetValue(_t, Convert.ToBoolean(dt.Rows[j][i].ToString()), null);
}
}
else
pi.SetValue(_t, "", null);//为空,但不为Null
break;
}
}
}
result.Add(_t);
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: