c# - 在.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"
> }
我在属性顶部作为注释提到的显示名称不起作用。
如何让我的代码返回名字而不是“名称”。非常感谢所有的答案。
解决方案
DisplayAttribute 无法按您的预期工作。
当 DisplayAttribute 仅用于 UI 时,您正在构建 .NET Core Web Api - 因此是 .NET MVC 项目。
为了实现您想要的,有几种可能性:
- 看起来您的 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; }
}
- 如果您不喜欢第一种方法并且您使用的是 Newtonsoft.Json(我认为您基于 JsonPropertyAttribute),您可以创建一个 CustomContractResolver - 如此处所示https://stackoverflow.com/a/ 33290710/15749118。
如果您使用的是 System.Text.Json,我认为 Microsoft 没有此功能可用。至少,我在 GitHub 上发现了几个公开的问题,要求这样做。
推荐阅读
- android - 如何在 XML Android Studio 中更改按钮的背景?
- r - 如何在不同的页面上做 ggplot2 facet_wrap?
- reactjs - 我将如何构建一个包含嵌入式 reactjs 前端代码的 spring boot rest api 项目
- reactjs - expo 的 npm 包更新策略
- python - 为什么我收到 NameError: 'Wolf' is not defined
- django - django favicon 图标不显示
- c++ - 从 ESP32 蓝牙库生成的回调访问地图/向量时出现空键/值问题
- microsoft-teams - 从 MS Teams 聊天中调用外部 API
- javascript - 如何根据另一个动态下拉列表和文本框为动态文本框提供默认值?
- ruby - 如何使用 Ruby 初始化二维数组的所有值,有什么方法可以一步完成吗?