C# XML序列化限制与XmlIgnore用法详解

栗子
栗子
发布时间:2026-10-14| 4人浏览过
原创

C#使用XmlSerializer进行XML序列化时受到严格限制,包括必须拥有无参构造函数、仅处理公共成员以及不支持某些复杂类型。本文详细解析这些限制,并通过代码演示如何使用[XmlIgnoreAttribute]标记排除特定属性,从而顺利生成XML文件。

XML序列化的核心限制

在C#开发中,二进制序列化通常能保留类的私有字段和所有数据细节,但XML序列化则更为严格。若要将自定义类(如Arwen)成功转换为XML格式,必须注意以下三个主要约束:

  • 成员可见性:XmlSerializer默认只能序列化公共的(public)字段或属性,私有的或受保护的数据将被忽略。
  • 数据类型兼容性:并非所有类型都能被序列化。例如标准库中的Hashtable和TimeSpan等类型,如果未在内部实现特定的接口(如IXmlSerializable),通常会引发异常。
  • 构造函数要求:目标类必须包含一个公开的无参数构造函数,以便反序列化器创建新实例时能够正常工作。

处理不支持的类型与XmlIgnore用法

当类中包含上述不受支持的类型(如Hashtable或TimeSpan)时,简单的“曲线救国”方式(如转换为列表结构)虽然可行但较为繁琐。更常用的做法是使用[XmlIgnore]特性显式告知序列化器忽略这些字段。

第1步:定义带有特性的数据类

首先引入必要的命名空间System.Xml.Serialization和System.IO。在类定义中,对不想存入XML的属性添加[XmlIgnore]标注,并确保存在空的无参构造函数:

using System.Xml.Serialization;
using System.IO;

class Arwen
{
    private Hashtable table = new Hashtable();
    private TimeSpan time = new TimeSpan(0, 0, 1);

    public Arwen()
    {
        // 必须有
    }

    [XmlIgnore]
    public Hashtable Table
    {
        get { return table; }
        set { table = value; }
    }

    [XmlIgnore]
    public TimeSpan Time
    {
        get { return time; }
        set { time = value; }
    }
}

第2步:执行序列化操作

初始化对象并准备文件路径,使用XmlSerializer生成XML流:

Arwen weiwen = new Arwen();
weiwen.Time = new TimeSpan(1, 2, 3); // 1小时 2分钟 3秒
weiwen.Table.Add("arwen", 250);

string filename = @"c:\temp\arwen.xml";
XmlSerializer xs = new XmlSerializer(typeof(Arwen));

using (FileStream file = new FileStream(filename, FileMode.Create))
{
    xs.Serialize(file, weiwen);
}

由于使用了[XmlIgnore],生成的XML文件中将不包含Table和Time的内容。如果需要保存这些数据,建议额外提供相应的公开属性作为转换器(例如使用string属性来映射TimeSpan)。

总结

掌握C# XML序列化的限制对于数据处理至关重要。通过遵循无参构造函数规则和合理使用[XmlIgnore]属性,可以有效解决常见类型的序列化问题。以上就是关于C# XML序列化注意事项及代码实现的详细内容,更多关于C# XML序列化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。