C# 如何仅为ASP.NET核心Web Api中的特定操作更改响应json属性名称?
我正在使用ASP.NET Core 3.1 Web API。我有以下回应模式:C# 如何仅为ASP.NET核心Web Api中的特定操作更改响应json属性名称?,c#,asp.net-core,asp.net-web-api,C#,Asp.net Core,Asp.net Web Api,我正在使用ASP.NET Core 3.1 Web API。我有以下回应模式: public class UserModel { public string UserId { get; set; } public string UserName { get; set; } } 它生成以下json响应: { "userId": 1, "userName": "SomeName" } 我感兴趣的是,是否有任何
public class UserModel
{
public string UserId { get; set; }
public string UserName { get; set; }
}
它生成以下json响应:
{
"userId": 1,
"userName": "SomeName"
}
我感兴趣的是,是否有任何方法可以在不创建新类的情况下更改输出JSON的属性名称?此外,我只想将此规则应用于特定操作,并保留其他操作的默认属性名称。在我们的项目中,我们坚持使用System.Text.Json序列化程序。所需的JSON输出:
{
"teacherId": 1,
"teacherName": "SomeName"
}
您可以在
Action
上使用Microsoft.AspNetCore.Mvc
命名空间中的JsonResult
类
return new JsonResult(new
{
TeacherId = userModel.UserId,
TeacherName = userModel.UserName
});
默认情况下,.net core 3.*不适用于Newtonsoft
您应该安装Microsoft.AspNetCore.Mvc.NewtonsoftJson
并将其添加到您的项目中
services.AddControllers().AddNewtonsoftJson() 如果模型只包含两个属性,您可以尝试匿名类型。创建一个
教师模型
-教师比用户更具体,因此他们代表不同的事物。如果您只是更改属性的名称,是否可以为此创建一个单独的模型?如果您问自己这个问题,“这两件事是否应该能够独立地改变?”,答案是“是”,那么是的,有两个独立的模型就可以了。问题的标题表明改变只针对一个特定的动作-这将适用于所有使用UserModel
的动作。
using Newtonsoft.Json;
public class UserModel
{
[JsonProperty(PropertyName = "Foo")]
public string UserId { get; set; }
public string UserName { get; set; }
}