У меня есть контроллер 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), но опять безуспешно.
здесь есть решение для net8 stackoverflow.com/questions/59559560/…
Отвечает ли это на ваш вопрос? Как отключить или обработать CamelCasing в ответе JSON ASP.NET Core?
ОП заявил, что они используют сериализатор newtonsoft.json, ваши предложения, похоже, относятся к сериализатору system.text.json.
Этот последний фрагмент кода в вопросе должен работать. Вы абсолютно уверены, что в этом сценарии значение json содержало имена свойств CamelCase?





Спасибо PowerMouse.
Это было оно. Пример показан для json.net и newtonsoft, возможно, понадобится только один, в зависимости от того, что используется.
services
.AddMvc().AddJsonOptions( jsonOpt =>
{
jsonOpt.JsonSerializerOptions.PropertyNamingPolicy = null;
})
.AddNewtonsoftJson(opts =>
{
opts.SerializerSettings.ContractResolver = null;
})
builder.Services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);