首页 > 解决方案 > 在.net core web api中的属性上显示名称注释

问题描述

我的是一个.net core web api,它返回用户详细信息:我有一个这样的模型类:

public class UserDetails
    {

        [JsonProperty("name")]
        [Display(Name = "First Name")]
        public string FirstName { get; set; }

        [JsonProperty("lastName")]
        public string LastName { get; set; }

        [JsonProperty("designation")]
        public string Designation { get; set; }
    }

我在数据库层中有一个方法,它从 Mongo 获取一些用户详细信息并反序列化 json 并转换为UserDetails类型。

当我在 postman 中看到端点的响应时,我看到它是这样的:

> {
>             "name": "ABC",
>             "LastName": "XYZ",
>             "designation": "team Lead"
>         }

我在属性顶部作为注释提到的显示名称不起作用。
如何让我的代码返回名字而不是“名称”。非常感谢所有的答案。

标签: c#.netasp.net-core-webapi

解决方案


DisplayAttribute 无法按您的预期工作。

当 DisplayAttribute 仅用于 UI 时,您正在构建 .NET Core Web Api - 因此是 .NET MVC 项目。

为了实现您想要的,有几种可能性:

  1. 看起来您的 UserDetails 模型目前正在处理很多职责。照原样,它用于绑定来自 MongoDB 的数据,它存在于您的域中并代表发送到客户端的模型。所以,在我看来,你应该创建一个 DTO 类(UserDetailsDTO)。然后,您只需要将域模型中的属性映射到 DTO。这使您可以灵活地选择要向客户端公开或不公开的内容。
public class UserDetailsDTO
{
    [JsonProperty("first name")]
    public string FirstName { get; set; }

    [JsonProperty("lastName")]
    public string LastName { get; set; }

    [JsonProperty("designation")]
    public string Designation { get; set; }
}
  1. 如果您不喜欢第一种方法并且您使用的是 Newtonsoft.Json(我认为您基于 JsonPropertyAttribute),您可以创建一个 CustomContractResolver - 如此处所示https://stackoverflow.com/a/ 33290710/15749118

如果您使用的是 System.Text.Json,我认为 Microsoft 没有此功能可用。至少,我在 GitHub 上发现了几个公开的问题,要求这样做。


推荐阅读