k__BackingField удалить в C # (видно через Swashbuckle / Swagger)

Я использую Swashbuckle 5 в своем проекте ASP.NET webapi со всеми настройками по умолчанию. Он сериализует вывод моего метода, чтобы показать мне схему ответа. Я получаю документацию, которая выглядит примерно так:

 Response Class (Status 200)
 Model  Model Schema
 [
   {
    "<Key>k__BackingField": "string",
    "<Value>k__BackingField": "string",
    "<Id>k__BackingField": 0
  }
]

Это генерируется следующим кодом C #

    /// <summary>
    ///     Fetches all system configuration items
    /// </summary>
    /// <returns>List of <see cref="SystemConfigurationDto" /> items</returns>
    public IList<SystemConfigurationDto> GetAllSystemConfigurationItems()
    {
        var result = CommandProcessor.ProcessCommand(new SystemConfigurationQueryCommand()) as SystemConfigurationQueryCommandResponse;

        return result.Results.ToList();
    }

где result.Results - это в основном стандартный список объектов, каждый из которых содержит эти поля ключ / значение / идентификатор. Я прочитал здесь https://conficient.wordpress.com/2014/05/22/getting-rid-of-k__backingfield-in-serialization/, что атрибут [serializable] может повлиять на это, но я не желаю избавляться от этого атрибута, если это возможно. Есть ли рецепт для настройки этого артефакта сериализации?


person Askar Ibragimov    schedule 17.04.2015    source источник


Ответы (1)


Добавьте это в WebApiConfig.cs:

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
    new DefaultContractResolver { IgnoreSerializableAttribute = true };

Это решает проблему для классов, отмеченных [Serializable]. У меня также возникают периодические проблемы, даже если у классов нет этого атрибута, поэтому я всегда использую этот параметр сейчас.

person Alex Angas    schedule 26.06.2015
comment
Это было у меня все утро. Я неожиданно столкнулся с этим сегодня утром, обновив некоторые пакеты NuGet. Решение ранее работало нормально в течение нескольких месяцев. Атрибут [Serializable] нигде не использовался и никогда не использовался. Добавление этого фрагмента кода решило эту проблему. Большое вам спасибо, сэр! - person ceej; 15.07.2015
comment
Для меня это решило проблему k__BackingField, но после этого изменения клиенты более старого метода API перестали получать данные. - person Marco Forberg; 12.09.2018