文件名: getJson_2List2Datatable_toExcel
功能: 将请求返回的JSON字符串解析并导入excel表格
一..构建解析json字符串的实体类
根据自己的json字符串构建实体类, 二这个类中存在着泛型
json字符串转c#实体类网址: https://www.bejson.com/convert/json2csharp/
//实体类, Datastreams的类模板 public class DataItem { /// <summary> /// /// </summary> public string create_time { get; set; } /// <summary> /// /// </summary> public string update_at { get; set; } /// <summary> /// /// </summary> public string id { get; set; } /// <summary> /// /// </summary> public string uuid { get; set; } /// <summary> /// /// </summary> public int current_value { get; set; } } public class Root { /// <summary> /// /// </summary> public int errno { get; set; } /// <summary> /// /// </summary> public List<DataItem> data { get; set; } /// <summary> /// /// </summary> public string error { get; set; } }
二..将list<>泛型转换为Datatable类型数据
//list2datatable public class ListToDatatable { public ListToDatatable() { } public static DataTable ListToDataTable<T>(List<T> entitys) { //检查实体集合不能为空 if (entitys == null || entitys.Count < 1) { return new DataTable(); } //取出第一个实体的所有Propertie Type entityType = entitys[0].GetType(); PropertyInfo[] entityProperties = entityType.GetProperties(); //生成DataTable的structure //生产代码中,应将生成的DataTable结构Cache起来,此处略 DataTable dt = new DataTable("dt"); for (int i = 0; i < entityProperties.Length; i++) { //dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType); dt.Columns.Add(entityProperties[i].Name); } //将所有entity添加到DataTable中 foreach (object entity in entitys) { //检查所有的的实体都为同一类型 if (entity.GetType() != entityType) { throw new Exception("要转换的集合元素类型不一致"); } object[] entityValues = new object[entityProperties.Length]; for (int i = 0; i < entityProperties.Length; i++) { entityValues[i] = entityProperties[i].GetValue(entity, null); } dt.Rows.Add(entityValues); } return dt; } }
三..将Datatable类型数据转存到excel
//datable2excel public static void ExportExcel(DataTable dt) { if (dt == null || dt.Rows.Count == 0) return; Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp == null) { return; } System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; Microsoft.Office.Interop.Excel.Range range; long totalCount = dt.Rows.Count; long rowRead = 0; float percent = 0; for (int i = 0; i < dt.Columns.Count; i++) { worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName; range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1]; range.Interior.ColorIndex = 15; range.Font.Bold = true; } for (int r = 0; r < dt.Rows.Count; r++) { for (int i = 0; i < dt.Columns.Count; i++) { worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i].ToString(); } rowRead++; percent = ((float)(100 * rowRead)) / totalCount; } xlApp.Visible = true; }
四..简单使用
static void Main(string[] args) { //此设备为设备组中的chatdeevice_01, string response = GetPage("http://api.heclouds.com/devices/25900768/datastreams"); Root MyResult = JsonConvert.DeserializeObject(response, typeof(Root)) as Root; Console.WriteLine(response); System.Data.DataTable dt = new System.Data.DataTable(); dt = ListToDatatable.ListToDataTable(MyResult.data); Console.WriteLine(MyResult.data); ExportExcel(dt); Console.Read(); }