C# 如何将对象属性序列化为xml节点的属性而非子元素

煙雲
发布: 2025-10-29 11:16:01
原创
250人浏览过
使用[XmlAttribute]可将属性序列化为XML属性,仅支持基元类型、枚举和Nullable类型,可通过参数自定义属性名和命名空间,复杂类型不适用。

c# 如何将对象属性序列化为xml节点的属性而非子元素

在 C# 中使用 XmlSerializer 进行序列化时,默认会将对象的属性作为 XML 的子元素输出。如果你希望将某个属性序列化为 XML 节点的属性(attribute) 而不是子元素(element),需要使用 [XmlAttribute] 特性。

使用 [XmlAttribute] 将属性序列化为 XML 属性

给目标属性加上 [XmlAttribute] 特性,即可让 XmlSerializer 将其输出为 XML 节点的属性。

示例代码:

假设有如下类:

using System;
using System.Xml.Serialization;

[XmlRoot("Person")]
public class Person
{
    [XmlAttribute("id")]
    public int Id { get; set; }

    [XmlAttribute("name")]
    public string Name { get; set; }

    // 这个会作为子元素
    public string Email { get; set; }
}
登录后复制

序列化代码:

var person = new Person
{
    Id = 123,
    Name = "Alice",
    Email = "alice@example.com"
};

var serializer = new XmlSerializer(typeof(Person));
using var writer = new StringWriter();
serializer.Serialize(writer, person);
Console.WriteLine(writer.ToString());
登录后复制

输出的 XML 结果为:

```xml ail>alice@example.com ```

可以看到,IdName 成为了 节点的属性,而 Email 是子元素。

序列猴子开放平台
序列猴子开放平台

具有长序列、多模态、单模型、大数据等特点的超大规模语言模型

序列猴子开放平台0
查看详情 序列猴子开放平台

注意事项

[XmlAttribute] 只能用于某些简单类型,如:
- 基元类型(int、string、bool、double 等)
- 枚举
- Nullable 类型
不能用于复杂对象或集合,否则会抛出异常。

例如,以下写法是错误的

```csharp [XmlAttribute] public Address HomeAddress { get; set; } // ❌ 复杂类型不能作为 XML 属性 ```

控制属性名称和命名空间

你可以自定义属性名或指定命名空间:

  • [XmlAttribute("customName")] —— 指定属性名为 customName
  • [XmlAttribute(Namespace = "http://example.com")] —— 指定命名空间

例如:

```csharp [XmlAttribute("uid", Namespace = "http://schemas.example.com/user")] public int UserId { get; set; } ```

总结

要将对象属性序列化为 XML 节点的属性,只需:

  • 使用 [XmlAttribute] 特性标记属性
  • 确保属性类型是支持的简单类型
  • 可选地指定属性名或命名空间

基本上就这些,不复杂但容易忽略。

以上就是C# 如何将对象属性序列化为xml节点的属性而非子元素的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号