using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.IO;
using System.Reflection;
using System.Data;
using System.Collections;
namespace NetLibrary
{
public static class ListExtension
{
#region 转JSON文件
///
/// 转JSON文件
///
/// 扩展对象
/// 文件路径
public static void ToJSON(this Object obj, string filePath)
{
string jsonString = new JavaScriptSerializer().Serialize(obj);
string DirectoryName = Path.GetDirectoryName(filePath);
if (System.IO.Directory.Exists(DirectoryName) == false) System.IO.Directory.CreateDirectory(DirectoryName);
string fileName = Path.GetFileName(filePath);
File.WriteAllText(filePath, jsonString);
}
#endregion
#region List转DataTable
///
/// List转DataTable
///
/// 对象
/// 扩展对象
///
public static DataTable ToDataTable(this IEnumerable ListModel) where TResult : class
{
//创建属性的集合
List pList = new List();
//获得反射的入口
Type type = typeof(TResult);
DataTable dt = new DataTable();
//把所有的public属性加入到集合 并添加DataTable的列
Array.ForEach(type.GetProperties(), item =>
{
pList.Add(item);
Type columnType = item.PropertyType;
if (item.PropertyType.IsGenericType && item.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
columnType = item.PropertyType.GetGenericArguments()[0];
}
dt.Columns.Add(new DataColumn(item.Name, columnType));
});
foreach (var model in ListModel)
{
//创建一个DataRow实例
DataRow row = dt.NewRow();
//给row 赋值
pList.ForEach(item =>
{
object value = item.GetValue(model, null);
if (value != null) row[item.Name] = value;
});
//加入到DataTable
dt.Rows.Add(row);
}
return dt;
}
#endregion
#region List序列化Json
public static string ToJson(this IEnumerable list, List ListSerializePropertieName) where TResult : class
{
//创建属性的集合
List pList = new List();
//获得反射的入口
Type type = typeof(TResult);
DataTable dt = new DataTable();
//把所有的public属性加入到集合 并添加DataTable的列
Array.ForEach(type.GetProperties(), item =>
{
pList.Add(item);
Type columnType = item.PropertyType;
if (item.PropertyType.IsGenericType && item.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
columnType = item.PropertyType.GetGenericArguments()[0];
}
dt.Columns.Add(new DataColumn(item.Name, columnType));
});
DateTime time = new DateTime(0x7b2, 1, 1, 0, 0, 0, DateTimeKind.Utc);
JavaScriptSerializer parseJSON = new JavaScriptSerializer();
long DatetimeMinTimeTicks = time.Ticks;
string JsonResult = "[{";
List ListModel = new List();
foreach (var model in ListModel)
{
foreach (var item in pList)
{
if (ListSerializePropertieName.Contains(item.Name) == false) continue;
object value = item.GetValue(model, null);
if (value == null)
{
JsonResult += "\"" + item.Name + "\":null,";
continue;
}
Type columnType = item.PropertyType;
if (item.PropertyType.IsGenericType && item.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
columnType = item.PropertyType.GetGenericArguments()[0];
}
if (columnType == typeof(string))
{
string vvv = value.ToString();
vvv = vvv.Replace("\r\n", "\\r\\n").Replace("\n", "\\n");
JsonResult += "\"" + item.Name + "\":\"" + vvv + "\",";
continue;
}
if (columnType == typeof(DateTime))
{
DateTime datetime = Convert.ToDateTime(value);
JsonResult += "\"" + item.Name + "\":\"\\/Date(" + (long)((datetime.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 0x2710) + ")\\/\",";
continue;
}
if (columnType == typeof(bool))
{
JsonResult += "\"" + item.Name + "\":" + value.ToString().ToLower() + ",";
continue;
}
if (columnType == typeof(Int64))
{
JsonResult += "\"" + item.Name + "\":\"" + value + "\",";
continue;
}
if (columnType == typeof(decimal))
{
JsonResult += "\"" + item.Name + "\":\"" + Convert.ToDecimal(value).ToString("0.#########") + "\",";
continue;
}
if (columnType == typeof(Int32) || columnType == typeof(Int16) || columnType == typeof(float) || columnType == typeof(short))
{
JsonResult += "\"" + item.Name + "\":" + value + ",";
continue;
}
JsonResult += "\"" + item.Name + "\":" + parseJSON.Serialize(value) + ",";
}
}
return JsonResult;
}
#endregion
}
}