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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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