Я только что поменял наш проект с ASP .Net Core 1.0.0-rc2-final на 1.0.0. Наш веб-сайт и клиент перестали работать из-за использования заглавных букв в свойствах JSON. Например, эта строка JavaScript теперь не работает
for (var i = 0; i < collection.Items.length; i++){
потому что теперь контроллер вызывает массив «items» вместо «Items». Я не внес никаких изменений, кроме установки обновленных пакетов и редактирования файла project.json. Я не менял файлы модели C #, которые по-прежнему используют свои свойства.
Почему контроллеры ASP.Net Core начали возвращать JSON со свойствами в нижнем регистре? Как мне вернуться к ним, соблюдая регистр имен свойств из модели?
c#
asp.net-core
asp.net-core-1.0
дамблдад
источник
источник
Ответы:
MVC теперь сериализует JSON с именами случаев верблюда по умолчанию
Используйте этот код, чтобы по умолчанию избегать имен верблюжьих регистров
services.AddMvc() .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
Источник: https://github.com/aspnet/Announcements/issues/194
источник
Json()
вызова?Если вы нашли это в Google и ищете решение для Core 3.
Core 3 использует
System.Text.Json
, что по умолчанию не сохраняет регистр. Как упоминалось в этой проблеме с GitHub , установкаPropertyNamingPolicy
значения null устранит проблему.public void ConfigureServices(IServiceCollection services) { ... services.AddControllers() .AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);
и если вы не хотите изменять глобальные настройки, только для одного действия это так:
return Json(obj, new JsonSerializerOptions { PropertyNamingPolicy = null });
источник
Вы можете изменить поведение следующим образом:
services .AddMvc() .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
См. Объявление здесь: https://github.com/aspnet/Announcements/issues/194
источник
Те, кто перешел на Core 3.1 и имеет проект Core MVC, могут использовать следующий код установки в Startup.cs:
public void ConfigureServices(IServiceCollection services) { ... services.AddControllersWithViews().AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null); ... }
источник
Это исправит его в dotnet core 3 webapi, так что он вообще не изменит имена ваших свойств, и вы вернете своему клиенту именно то, что планировали.
В Startup.cs:
public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null); services.AddHttpClient(); }
источник
Для тех, кто использует ASP.net WEB API (а не ASP.NET Core).
Добавьте эту строку в свой WebApiConfig.
//Comment this jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
Добавляем это в качестве ответа здесь, потому что это также появляется сначала в поиске Google для веб-API.
источник
Для версий Core 2.x, используя этот код, вы можете по умолчанию избегать имен верблюжьих регистров. Вам необходимо добавить следующий код в метод ConfigureServices файла Startup.cs.
services.AddMvc() .AddJsonOptions(o => { if (o.SerializerSettings.ContractResolver != null) { var castedResolver = o.SerializerSettings.ContractResolver as DefaultContractResolver; castedResolver.NamingStrategy = null; } });
источник