我需要在ASP.NET MVC 6 webApi中为每个控制器设置特定的JSON设置.我发现这个样本(我希望!)适用于MVC 5: 在ASP.NET WebAPI Per Controller上强制使用CamelCase
using System;
using System.Linq;
using System.Web.Http.Controllers;
using System.Net.Http.Formatting;
using Newtonsoft.Json.Serialization;
public class CamelCaseControllerConfigAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
{
var formatter = controllerSettings.Formatters.OfType<JsonMediaTypeFormatter>().Single();
controllerSettings.Formatters.Remove(formatter);
formatter = new JsonMediaTypeFormatter
{
SerializerSettings = {ContractResolver = new CamelCasePropertyNamesContractResolver()}
};
controllerSettings.Formatters.Add(formatter);
}
}
Run Code Online (Sandbox Code Playgroud) 我有两个控制器:ControllerA 和 ControllerB。每个控制器的基类是ControllerBase。
ControllerA默认需要反序列化JSON
JsonSerializerOptions.IgnoreNullValues = false;
Run Code Online (Sandbox Code Playgroud)
ControllerB 需要使用选项反序列化 JSON
JsonSerializerOptions.IgnoreNullValues = true;
Run Code Online (Sandbox Code Playgroud)
我知道如何在 Startup.cs 中全局设置此选项
services.AddControllers().AddJsonOptions( options => options.JsonSerializerOptions.IgnoreNullValues = true);
Run Code Online (Sandbox Code Playgroud)
但是如何为 Controller 或 Action 设置特定的反序列化选项呢?(ASP.NET Core 3 API)
我知道这与过去的一些问题重复。但没有真正的解决方案。
\n\n\n\n\n\n我正在使用 .Net Core 3 多页模板。\n我已经尝试了如下所示的所有操作。但没有用。
\n\n这是我的应用程序项目的界面:
\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Abp.Application.Services;\nusing Abp.Application.Services.Dto;\nusing TSE.Kalibrasyon.Roles.Dto;\nusing TSE.Kalibrasyon.Users.Dto;\n\nnamespace TSE.Kalibrasyon.Labs\n{\n public interface ILabAppService : IApplicationService\n {\n string Test();\n Task<List<Entities.Labs.Labs>> GetAllAsync();\n System.Threading.Tasks.Task Update(Entities.Labs.Labs input);\n System.Threading.Tasks.Task Create(Entities.Labs.Labs input);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n其实现是:
\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing Abp.Application.Services;\nusing Abp.Application.Services.Dto;\nusing Abp.Authorization;\nusing Abp.Domain.Entities;\nusing Abp.Domain.Repositories;\nusing Abp.Extensions;\nusing Abp.IdentityFramework;\nusing Abp.Linq.Extensions;\nusing Abp.Localization;\nusing Abp.Runtime.Session;\nusing Abp.UI;\nusing TSE.Kalibrasyon.Authorization;\nusing TSE.Kalibrasyon.Authorization.Accounts;\nusing TSE.Kalibrasyon.Authorization.Roles;\nusing TSE.Kalibrasyon.Authorization.Users;\nusing TSE.Kalibrasyon.Roles.Dto;\nusing TSE.Kalibrasyon.Users.Dto;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.EntityFrameworkCore;\nusing TSE.Kalibrasyon.Entities.Labs.Dto;\nusing TSE.Kalibrasyon.Entities.Labs;\nusing TSE.Kalibrasyon.Labs.Dto;\nusing Abp.Web.Models;\nusing Newtonsoft.Json;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace TSE.Kalibrasyon.Labs\n{\n //[AbpAuthorize(PermissionNames.Pages_Users)]\n public class LabAppService : KalibrasyonAppServiceBase, …Run Code Online (Sandbox Code Playgroud) 我有一个用于第三方 API 的控制器,它使用蛇形命名约定。我的控制器的其余部分用于我自己的应用程序,该应用程序使用驼峰式 JSON 约定。我想自动反序列化和序列化我的模型从/到蛇案例为该控制器中的API。这个问题解释了如何在整个应用程序中使用 JSON 的蛇形命名策略,但是有没有一种方法可以指定仅对单个控制器使用命名策略?
我见过更改单个 ASP.NET Core 控制器的 JSON 序列化设置,它建议使用 ActionFilter,但这仅有助于确保传出的 JSON 正确序列化。如何将传入的 JSON 正确反序列化到我的模型?我知道我可以[JsonPropertyName]在模型属性名称上使用,但我更希望能够在控制器级别而不是模型级别设置某些内容。