使用[XmlAttribute]可将属性序列化为XML属性,仅支持基元类型、枚举和Nullable类型,可通过参数自定义属性名和命名空间,复杂类型不适用。

在 C# 中使用 XmlSerializer 进行序列化时,默认会将对象的属性作为 XML 的子元素输出。如果你希望将某个属性序列化为 XML 节点的属性(attribute) 而不是子元素(element),需要使用 [XmlAttribute] 特性。
给目标属性加上 [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可以看到,Id 和 Name 成为了 
[XmlAttribute] 只能用于某些简单类型,如:
- 基元类型(int、string、bool、double 等)
- 枚举
- Nullable 类型
不能用于复杂对象或集合,否则会抛出异常。
例如,以下写法是错误的:
```csharp [XmlAttribute] public Address HomeAddress { get; set; } // ❌ 复杂类型不能作为 XML 属性 ```你可以自定义属性名或指定命名空间:
例如:
```csharp [XmlAttribute("uid", Namespace = "http://schemas.example.com/user")] public int UserId { get; set; } ```要将对象属性序列化为 XML 节点的属性,只需:
基本上就这些,不复杂但容易忽略。
以上就是C# 如何将对象属性序列化为xml节点的属性而非子元素的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号