Получите контроллер ASP.NET Core 8 MVC, чтобы возвращать свойства JSON без изменений, не записывая имена свойств в нижнем регистре

У меня есть контроллер ASP.NET Core 8.

Когда я возвращаю объект, сериализованный с помощью Newtonsoft.Json в возврате Ok ниже, он меняет свойства на нижний регистр в JSON.

Я хочу, чтобы они оставались такими, как объявлено в C#, без необходимости добавлять атрибут JsonPropertyName ко всем свойствам.

Вместо этого:

{ 
   "id":"0",
   "name": "Foo"
}

Вместо этого я хочу получить это представление:

{ "Id: "0", "Name": "Foo" }

Это класс C# для этого:

class Foo
{
    public string Id { get; set; }
    public string Name { get; set; }
}

/// </summary>
[ApiController]
public class ManagerApiController : ControllerBase
{
    [Route("/api/v1/search-approval-workflows")]
    [ValidateModelState]
    [SwaggerOperation("SearchApprovalWorkflowsGet")]
    public virtual IActionResult SearchApprovalWorkflowsGet([FromQuery] string s)
    {
         // ...
         return OK(foo);
    }
}

Я пытался

DefaultContractResolver resolver = 
   new DefaultContractResolver
       {
           NamingStrategy = new DefaultNamingStrategy()
       };

resolver.NamingStrategy.OverrideSpecifiedNames = false;

string json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
                                               {
                                                   ContractResolver = resolver,
                                                   Formatting = Formatting.Indented
                                               });
return json;

Но это не сработало.

Я тоже пытался вернуться new JsonResult(foo), но опять безуспешно.

builder.Services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);

Power Mouse 20.03.2024 21:18

здесь есть решение для net8 stackoverflow.com/questions/59559560/…

Power Mouse 20.03.2024 21:19

Отвечает ли это на ваш вопрос? Как отключить или обработать CamelCasing в ответе JSON ASP.NET Core?

JuanR 20.03.2024 21:35

ОП заявил, что они используют сериализатор newtonsoft.json, ваши предложения, похоже, относятся к сериализатору system.text.json.

Zdeněk Jelínek 20.03.2024 21:36

Этот последний фрагмент кода в вопросе должен работать. Вы абсолютно уверены, что в этом сценарии значение json содержало имена свойств CamelCase?

Zdeněk Jelínek 20.03.2024 21:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
705
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо PowerMouse.

Это было оно. Пример показан для json.net и newtonsoft, возможно, понадобится только один, в зависимости от того, что используется.

services
      .AddMvc().AddJsonOptions( jsonOpt =>
      {
          jsonOpt.JsonSerializerOptions.PropertyNamingPolicy = null;
      })
      .AddNewtonsoftJson(opts =>
      {
          opts.SerializerSettings.ContractResolver = null;
       
      })

Другие вопросы по теме