C# json 转换成DataTable

### C# 中 JSON 转换为 DataTable 的方法解析 #### 概述 在实际的软件开发过程中,经常需要处理不同格式的数据交换问题。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。而在.NET平台下,`DataTable` 是一种非常灵活且强大的数据存储方式,它提供了类似数据库表的数据结构。因此,将 JSON 数据转换成 `DataTable` 是一个常见的需求。本文将详细分析如何在 C# 中实现这一转换过程。 #### 方法详解 根据给定的部分代码内容,我们可以看到这是一个名为 `ToDataTable` 的静态方法,其功能是将 JSON 字符串转换为 `DataTable`。下面我们来逐步解析这个方法的具体实现。 ```csharp ///<summary> ///json转DataTable ///</summary> ///<param name="json">待转换的 JSON 字符串</param> ///<returns>转换后的 DataTable 对象</returns> public static DataTable ToDataTable(string json) { DataTable dataTable = new DataTable(); // 实例化一个新的 DataTable 对象 DataTable result; try { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.MaxJsonLength = Int32.MaxValue; // 设置最大 JSON 长度限制 ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json); // 将 JSON 字符串反序列化为 ArrayList 对象 if (arrayList.Count > 0) // 如果 ArrayList 不为空 { foreach (Dictionary<string, object> dictionary in arrayList) // 遍历 ArrayList 中的每一个 Dictionary 对象 { if (dictionary.Keys.Count<string>() == 0) // 如果 Dictionary 的键数量为 0 { result = dataTable; return result; } if (dataTable.Columns.Count == 0) // 如果 DataTable 还没有列 { foreach (string current in dictionary.Keys) // 遍历 Dictionary 的每一个键 { dataTable.Columns.Add(current, dictionary[current].GetType()); // 添加一个新的列 } } DataRow dataRow = dataTable.NewRow(); // 创建一个新的 DataRow 对象 foreach (string current in dictionary.Keys) // 再次遍历 Dictionary 的每一个键 { dataRow[current] = dictionary[current]; // 将 Dictionary 中的值赋给 DataRow 的对应列 } dataTable.Rows.Add(dataRow); // 将 DataRow 添加到 DataTable 中 } } } catch { // 异常处理部分 } result = dataTable; return result; } ``` #### 关键步骤解释 1. **实例化 DataTable:**创建一个新的 `DataTable` 对象用于存放转换后的数据。 2. **设置 JSON 处理器:**通过 `JavaScriptSerializer` 类进行 JSON 的序列化与反序列化操作。为了防止因 JSON 字符串过长而引发的异常,设置 `MaxJsonLength` 属性为 `Int32.MaxValue`。 3. **反序列化 JSON:**使用 `Deserialize` 方法将 JSON 字符串转换为 `ArrayList` 对象,其中每个元素都是一个表示一行数据的 `Dictionary<string, object>`。 4. **构建 DataTable 结构:**如果当前 `DataTable` 没有列,则遍历 `Dictionary` 中的键来添加相应的列,并设置数据类型为对应的值类型。 5. **填充 DataTable 数据:**对于每一条数据(即每一个 `Dictionary`),创建一个新的 `DataRow` 并填充数据,最后将该行添加到 `DataTable` 中。 6. **异常处理:**虽然示例代码中没有具体实现异常处理逻辑,但应该在这里添加适当的异常捕获机制,比如记录错误日志或抛出异常等。 #### 总结 以上就是在 C# 中实现 JSON 转换为 `DataTable` 的方法详解。这种方法适用于处理 JSON 数据时需要将其转换为类似于 SQL 表格结构的场景。需要注意的是,在实际应用中还需要考虑更多的边界情况和异常处理逻辑,确保程序的健壮性和可靠性。



















/// json 转DataTable
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static DataTable ToDataTable(string json) //this
{
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
if (arrayList.Count > 0)
{
foreach (Dictionary<string, object> dictionary in arrayList)
{
if (dictionary.Keys.Count<string>() == 0)
{
result = dataTable;
return result;
}
if (dataTable.Columns.Count == 0)
{
foreach (string current in dictionary.Keys)
{
dataTable.Columns.Add(current, dictionary[current].GetType());
}
}

- zncliving2016-04-27学习一下,但不是我想要的
- u0143995512015-07-02不是很完美,遇到时间格式,会出问题

- 粉丝: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 西门子PLC1200与库卡机器人协同控制系统的程序解析及应用
- (源码)基于Spring Boot框架的遥感影像共享系统.zip
- MTK G90 AI智能芯片:全套源代码与硬件设计资料
- (源码)基于SSM框架的图书管理系统.zip
- MTK G90 AI智能芯片:软硬件一体化解决方案及其应用场景 全集
- PMSM滑模控制仿真优化:无位置传感器永磁电机文档分享,包括界面调整、波形记录与程序内部原理解析 · Simulink
- (源码)基于spring boot框架的医院信息管理系统.zip
- 工业自动化领域:西门子S7-200 Smart PLC与英威腾GD变频器Modbus通讯及触摸屏集成方案 Modbus 指南
- MATLAB Simulink中电动汽车七自由度模型的构建与稳定性验证
- 西门子300PLC与WinCC在甲醛生产自动化控制中的关键技术实现 - 自动化控制
- 西门子PLC 1200与V20变频器USS通讯项目:包含实际程序、CAD图纸及详细注释
- 基于Simulink的电动汽车电动真空助力制动系统模型 MATLAB Simulink v4.0
- 模糊控制算法在驾驶员制动意图识别模型中的应用:实例解析与学习指南 - 模糊控制
- 西门子S7-200SMART与施耐德ATV12变频器通讯及自动化控制实现
- C#编程实现CAD dXF文件导入与数控机床控制:圆心排序及坐标应用 - C#
- 基于CORDIC算法的FFT硬件加速器在小型SOC系统上的实现与应用 (07月)


