Свойства JSON теперь имеют более низкий регистр при свопинге с ASP.Net Core 1.0.0-rc2-final до 1.0.0
Я только что поменял наш проект на ASP.NET.NET 1.0.0-rc2-final до 1.0.0. Наш сайт и клиент перестали работать из-за капитализации свойств JSON. Например, эта строка JavaScript теперь терпит неудачу
for (var i = 0; i < collection.Items.length; i++){
потому что контроллер теперь вызывает "элементы" массива вместо "Элементы". Я не внес изменений без установки обновленных пакетов и редактирования файла project.json. Я не изменил файлы модели С#, которые по-прежнему используют их свойства.
Почему процессоры ASP.Net Core начали возвращать JSON с более низкими свойствами? Как мне вернуться к ним в честь случая имен свойств из модели?
Ответы
Ответ 1
MVC теперь сериализует JSON с именами верблюдов по умолчанию
Используйте этот код, чтобы избежать поменований корпусов верблюдов по умолчанию.
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
Источник:
https://github.com/aspnet/Announcements/issues/194
Ответ 2
Вы можете изменить поведение следующим образом:
services
.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
Смотрите объявление здесь: https://github.com/aspnet/Announcements/issues/194
Ответ 3
Если вы нашли это в Google и ищете решение для Core 3.
Core 3 использует System.Text.Json, который по умолчанию не сохраняет регистр. Как уже упоминалось в этой проблеме Github, установка для PropertyNamingPolicy значения null устранит проблему.
public void ConfigureServices(IServiceCollection services)
{
...
services.AddControllers()
.AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);
Ответ 4
Для кого-то, кто использует ASP.net WEB API (а не ASP.NET Core).
Добавьте эту строку в ваш WebApiConfig.
//Comment this jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
Добавив это в качестве ответа здесь, потому что это в первую очередь в поиске Google для веб-API, а также.