C#实现List与XML数据互换的简单类型支持
4星 · 超过85%的资源 需积分: 50 183 浏览量
更新于2024-09-12
1
收藏 7KB TXT 举报
本文主要介绍如何在C#中实现List对象与XML字符串之间的相互转换,特别支持简单数据类型如int、long、datetime、string、double、decimal以及object。
在C#编程中,有时我们需要将数据结构(如List)转换成XML格式以便存储或传输,或者从接收到的XML字符串中还原回数据结构。以下方法提供了一个方便的解决方案,特别是对于那些只包含基本类型数据的列表。
首先,我们来看一下如何将一个List对象转换为XML字符串。这个过程通常涉及到遍历列表中的每个元素,并将其转换为XML节点。下面的方法定义了一个泛型函数,它接受一个类型T作为参数,这个类型应该是上述支持的简单类型之一:
```csharp
public static string ListToXml<T>(List<T> list)
{
if (list == null || list.Count == 0)
{
return string.Empty;
}
Type tp = typeof(T);
if (!(tp == typeof(string) || tp == typeof(int) || tp == typeof(long) || tp == typeof(DateTime) ||
tp == typeof(double) || tp == typeof(decimal)))
{
throw new ArgumentException("Unsupported type.");
}
StringBuilder xmlBuilder = new StringBuilder();
xmlBuilder.Append("<root>");
foreach (T item in list)
{
xmlBuilder.Append("<item>");
xmlBuilder.Append(item.ToString());
xmlBuilder.Append("</item>");
}
xmlBuilder.Append("</root>");
return xmlBuilder.ToString();
}
```
这个方法首先检查传入的类型是否为支持的类型,然后遍历列表,将每个元素的ToString()结果封装到XML节点中。最后,所有节点都被包裹在`<root>`标签内,形成一个完整的XML字符串。
接下来,我们将XML字符串转换回List对象。同样,这里有一个泛型方法`xmlToList<T>`,它接受一个XML字符串作为输入:
```csharp
public static List<T> XmlToList<T>(string xml)
{
Type tp = typeof(T);
List<T> list = new List<T>();
if (xml == null || string.IsNullOrEmpty(xml))
{
return list;
}
try
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
if (tp == typeof(string) || tp == typeof(int) || tp == typeof(long) || tp == typeof(DateTime) ||
tp == typeof(double) || tp == typeof(decimal))
{
XmlNodeList nl = doc.SelectNodes("/root/item");
if (nl.Count == 0)
{
return list;
}
else
{
foreach (XmlNode node in nl)
{
if (tp == typeof(string)) { list.Add((T)(object)Convert.ToString(node.InnerText)); }
else if (tp == typeof(int)) { list.Add((T)(object)Convert.ToInt32(node.InnerText)); }
else if (tp == typeof(long)) { list.Add((T)(object)Convert.ToInt64(node.InnerText)); }
else if (tp == typeof(DateTime)) { list.Add((T)(object)Convert.ToDateTime(node.InnerText)); }
else if (tp == typeof(double)) { list.Add((T)(object)Convert.ToDouble(node.InnerText)); }
else if (tp == typeof(decimal)) { list.Add((T)(object)Convert.ToDecimal(node.InnerText)); }
}
}
}
else
{
throw new ArgumentException("Unsupported type.");
}
}
catch (Exception ex)
{
// 处理加载XML时可能抛出的异常
}
return list;
}
```
这个方法首先加载XML字符串到一个XmlDocument对象,然后遍历`<root>`下的所有`<item>`节点,根据类型T将节点的文本内容转换为相应的简单类型,并添加到返回的List中。
通过这两个方法,我们可以方便地在C#中实现List对象与XML字符串之间的互转,适用于处理包含简单类型数据的列表。需要注意的是,这些方法并不适用于复杂的对象序列化,如果需要序列化具有复杂结构的对象,可以考虑使用.NET框架提供的XmlSerializer类或其他第三方库。
2020-09-01 上传
2015-01-25 上传
2019-11-27 上传
2024-11-06 上传
2018-03-21 上传
2020-09-01 上传
2020-09-04 上传
2020-08-31 上传
g554872342
- 粉丝: 0
- 资源: 2
最新资源
- PureMVC AS3在Flash中的实践与演示:HelloFlash案例分析
- 掌握Makefile多目标编译与清理操作
- STM32-407芯片定时器控制与系统时钟管理
- 用Appwrite和React开发待办事项应用教程
- 利用深度强化学习开发股票交易代理策略
- 7小时快速入门HTML/CSS及JavaScript基础教程
- CentOS 7上通过Yum安装Percona Server 8.0.21教程
- C语言编程:锻炼计划设计与实现
- Python框架基准线创建与性能测试工具
- 6小时掌握JavaScript基础:深入解析与实例教程
- 专业技能工厂,培养数据科学家的摇篮
- 如何使用pg-dump创建PostgreSQL数据库备份
- 基于信任的移动人群感知招聘机制研究
- 掌握Hadoop:Linux下分布式数据平台的应用教程
- Vue购物中心开发与部署全流程指南
- 在Ubuntu环境下使用NDK-14编译libpng-1.6.40-android静态及动态库