You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.NET Core API如何自定义返回数据的名称与结构?

实现自定义XML序列化结构的解决方案

这问题我太熟了!要把你的UserInfo类序列化成目标XML格式,咱们只需要借助.NET自带的System.Xml.Serialization命名空间下的特性来精准配置,分三步就能搞定:

1. 类名重命名(UserInfo → User)

给你的UserInfo类加上[XmlRoot]特性,指定根元素名为"User",这样序列化后的根节点就会从<UserInfo>变成<User>。

2. 将name字段转为元素属性

把原来的name字段改成自动属性(更符合.NET规范),然后加上[XmlAttribute]特性,这样它就会作为<User>元素的属性输出,而不是子元素。

3. 自定义数组元素名称(int → endpoint)

给endpoints数组加上[XmlArrayItem]特性,指定数组元素的名称为"endpoint",这样数组里的每个int值就会被序列化为<endpoint>标签,而不是默认的<int>。

完整的类代码示例

using System.Xml.Serialization;

[XmlRoot("User")]
public class UserInfo 
{
    [XmlAttribute]
    public string Name { get; set; }

    [XmlArray("endpoints")]
    [XmlArrayItem("endpoint")]
    public int[] Endpoints { get; set; }
}

注:加[XmlArray("endpoints")]是为了把数组的父节点改成全小写的<endpoints>,完全匹配你想要的格式

关键配置:确保ASP.NET Core使用XmlSerializer

默认情况下,ASP.NET Core的XML格式化器可能用的是DataContractSerializer,它不识别上面的XmlSerializer特性,所以需要在Program.cs里配置启用XmlSerializer格式化器:

var builder = WebApplication.CreateBuilder(args);

// 添加控制器并启用XmlSerializer格式化器
builder.Services.AddControllers()
    .AddXmlSerializerFormatters();

var app = builder.Build();

// 其他中间件配置...
app.MapControllers();

app.Run();

测试效果

当你的API返回UserInfo实例时:

return Ok(new UserInfo 
{ 
    Name = "aaaaaa", 
    Endpoints = new[] { 1, 2 } 
});

得到的XML响应就是你想要的:

<User name="aaaaaa">
  <endpoints>
    <endpoint>1</endpoint>
    <endpoint>2</endpoint>
  </endpoints>
</User>

内容的提问来源于stack exchange,提问作者SoptikHa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:12:13