在C#中,System.Xml命名空间下的XmlConvert类提供了一组静态方法,用于在XML字符串表示和.NET公共语言运行时类型之间进行符合XML规范的转换。与普通的Convert类不同,XmlConvert严格遵守W3C XML标准,能够正确处理时区、小数格式和名称编码等细节。

XmlConvert类常用方法分类
XmlConvert的常用方法大致可以分为三类:名称编码与解码、字符串与CLR类型互转、以及XML字符转义。下面通过具体方法和代码来了解。
1. 名称编码与解码
当XML元素或属性名包含空格、冒号等非标准字符时,可以使用EncodeName进行编码,用DecodeName还原。
using System;
using System.Xml;
class Program
{
static void Main()
{
// 编码包含空格的名称
string encoded = XmlConvert.EncodeName("user name");
Console.WriteLine(encoded); // 输出 user_x0020_name
// 解码还原
string decoded = XmlConvert.DecodeName(encoded);
Console.WriteLine(decoded); // 输出 user name
}
}
2. 字符串与CLR类型转换
XmlConvert提供了大量ToDateTime、ToDouble、ToInt32等方法来将XML字符串转为对应类型,也有对应的ToString重载将类型转回XML字符串。
using System;
using System.Xml;
class Program
{
static void Main()
{
// 将符合XML日期时间的字符串转为DateTime
string dateStr = "2023-10-01T12:30:00+08:00";
DateTime dt = XmlConvert.ToDateTime(dateStr, XmlDateTimeSerializationMode.Local);
Console.WriteLine(dt);
// 将double转为XML字符串
double value = 3.14;
string xmlNumber = XmlConvert.ToString(value);
Console.WriteLine(xmlNumber); // 输出 3.14
// 将字符串转为double
double parsed = XmlConvert.ToDouble("3.14");
Console.WriteLine(parsed);
}
}
3. 特殊字符转义
虽然XmlConvert没有直接叫Escape的方法,但配合XmlWriter使用时,内部会调用相应逻辑。我们也可以用VerifyXmlChars检查字符串是否包含非法XML字符。
using System;
using System.Xml;
class Program
{
static void Main()
{
string input = "abcu0001def"; // 包含非法控制字符
try
{
XmlConvert.VerifyXmlChars(input);
}
catch (XmlException ex)
{
Console.WriteLine("发现非法XML字符: " + ex.Message);
}
}
}
方法对照表
| 方法 | 作用 |
|---|---|
| EncodeName | 将XML名称中的非法字符编码为转义序列 |
| DecodeName | 将编码后的名称还原为原始字符串 |
| ToDateTime | 将XML日期时间字符串转为DateTime |
| ToString | 将CLR类型转为符合XML规范的字符串 |
| ToDouble | 将XML数字字符串转为double |
使用建议
在读写XML文件或处理XML片段时,优先使用XmlConvert而不是Convert,可以避免区域设置导致的格式偏差。例如XmlConvert.ToString(DateTime.Now)总是输出标准格式,而DateTime.Now.ToString()会受当前线程文化影响。
注意:XmlConvert的EncodeName方法会把空格转为_x0020_,这种名称在XML中合法但不便于阅读,仅建议在动态生成节点名时使用。
掌握上述常用方法后,你可以更加安全、规范地在C#中完成XML数据的转换与处理工作。
C#XmlConvertXML数据类型转换编码解码修改时间:2026-07-25 10:24:27