我是靠谱客的博主 端庄冥王星,最近开发中收集的这篇文章主要介绍用C#, 把从ONENET获取的JSON字符泛型转换为DataTable类型, 并导出至Excel,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文件名: 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();
}
最后
以上就是端庄冥王星为你收集整理的用C#, 把从ONENET获取的JSON字符泛型转换为DataTable类型, 并导出至Excel的全部内容,希望文章能够帮你解决用C#, 把从ONENET获取的JSON字符泛型转换为DataTable类型, 并导出至Excel所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复