Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅为ASP.NET核心Web Api中的特定操作更改响应json属性名称?_C#_Asp.net Core_Asp.net Web Api - Fatal编程技术网

C# 如何仅为ASP.NET核心Web Api中的特定操作更改响应json属性名称?

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" } 我感兴趣的是,是否有任何

我正在使用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"
}
我感兴趣的是,是否有任何方法可以在不创建新类的情况下更改输出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; }
}