发布网友
共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"));
这些转换提供了在不同数据结构之间灵活转换的能力,有助于提高代码的可读性和可维护性。