Подтвердить что ты не робот

Свойства 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 с более низкими свойствами? Как мне вернуться к ним в честь случая имен свойств из модели?

4b9b3361

Ответ 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, а также.