首页 热点资讯 义务教育 高等教育 出国留学 考研考公

C#的DataTable、List、Dictionary、JSON、XML之间的转换

发布网友

我来回答

1个回答

热心网友

DataTable与List、Dictionary、JSON、XML之间的转换,是C#开发中常见的操作。转换目的是为了适应不同的数据结构需求,提高代码的灵活性和复用性。下面将对这些转换进行概述:

### 1. DataTable转List

从DataTable到List的转换通常用于将表格数据转换为可迭代的列表结构,便于后续的遍历和操作。使用`ToList()`方法实现这一转换:

csharp
List list = dataTable.AsEnumerable().Select(row => new MyModel { // 对列进行映射 }).ToList();

### 2. DataTable转Dictionary

将DataTable转换为Dictionary,可以使用列名作为键,列值作为值。这在需要以键值对的形式组织数据时非常有用:

csharp
Dictionary<string, List> dict = dataTable.AsEnumerable().ToDictionary(row => row.Field("KeyColumn"), row => row.ItemArray.Select(cell => cell.Value).ToList());

### 3. DataTable转JSON

转换为JSON格式通常是为了数据的序列化和传输。使用Json.NET库的`JsonConvert.SerializeObject()`方法:

csharp
using Newtonsoft.Json;
string json = JsonConvert.SerializeObject(dataTable);

### 4. DataTable转XML

将DataTable转换为XML文件或字符串,便于数据的持久化或在网络上传输:

csharp
using System.Xml.Linq;
string xml = XElement.Load(dataTable).ToString();

### List转DataTable

使用`DataTable.Load()`方法加载List数据到DataTable中:

csharp
List list = ...;
DataTable dt = new DataTable("MyTable");
foreach (PropertyInfo prop in typeof(MyModel).GetProperties())
dt.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (MyModel item in list)
{
dt.Rows.Add(item.GetType().GetProperties().Select(prop => prop.GetValue(item)).ToArray());
}

### List转Dictionary

使用字典存储List中的数据,通常用于映射或关联操作:

csharp
Dictionary<string, List> dict = list.GroupBy(item => item.Key).ToDictionary(g => g.Key, g => g.ToList());

### List转JSON

转换过程与DataTable相似,使用Json.NET序列化:

csharp
string json = JsonConvert.SerializeObject(list);

### List转XML

创建XML文档,遍历List并添加节点:

csharp
XDocument doc = new XDocument();
foreach (MyModel item in list)
{
XElement itemElement = new XElement("Item", item.GetType().GetProperties().Select(prop => new XElement(prop.Name, prop.GetValue(item))));
doc.Add(itemElement);
}

### Dictionary转List

将字典转换为List,通常涉及键或值的遍历:

csharp
List list = dict.Values.SelectMany(x => x).Cast().ToList();

### Dictionary转DataTable

创建DataTable并填充字典中的键值对:

csharp
DataTable dt = new DataTable("MyTable");
foreach (KeyValuePair<string, List> pair in dict)
{
dt.Columns.Add(pair.Key);
foreach (object value in pair.Value)
dt.Rows.Add(value);
}

### Dictionary转JSON

使用Json.NET序列化:

csharp
string json = JsonConvert.SerializeObject(dict);

### JSON转List

解析JSON字符串并转换为List:

csharp
var list = JsonConvert.DeserializeObject<List>(json);

### JSON转Dictionary

解析JSON字符串并转换为Dictionary:

csharp
Dictionary dict = JsonConvert.DeserializeObject<Dictionary>(json);

### JSON转DataTable

解析JSON字符串并加载到DataTable中:

csharp
DataTable dt = JsonConvert.DeserializeObject(json);

### XML转List

解析XML文件并转换为List:

csharp
XDocument doc = XDocument.Load("xmlfile.xml");
List list = doc.Descendants("Item")
.Select(x => new MyModel
{
// 解析XML节点属性和子节点值
})
.ToList();

### XML转Dictionary

解析XML文件并转换为Dictionary:

csharp
Dictionary dict = XDocument.Load("xmlfile.xml")
.Descendants()
.ToDictionary(x => x.Name.LocalName, x => x.Value);

### XML转DataTable

解析XML文件并加载到DataTable中:

csharp
DataTable dt = XDocument.Load("xmlfile.xml")
.Descendants()
.Select(x => x.ToObject())
.ToList()
.Select(row => row.Table)
.First();

### XML转JSON

将XML解析为JSON:

csharp
string json = JsonConvert.SerializeObject(XDocument.Load("xmlfile.xml"));

这些转换提供了在不同数据结构之间灵活转换的能力,有助于提高代码的可读性和可维护性。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com