Mds.Libraries.CSharp.EnumBinding 2.1.0

Mds.Libraries.CSharp.EnumBinding

Пакет для удобного и управляемого биндинга Enum в Api.

Пример работы

public class SelectHarmonizationLinksParameters
{
    // Можно прописать для Enum свойства
    // В параметрах мы указываем каким способом биндить это свойство
    // Если будет не указан, то будет использоваться способ по умолчанию, который указывается при подключении библиотеки в проект
    [JsonProperty("type")]
    [EnumBinding(EnumBinding.Description)]
    public ContractType Type { get; set; }

    // Можно прописать для перечисления Enum свойства
    [FromQuery(Name = "catalog")]
    [EnumBinding]
    public IEnumerable<HarmonizationLinkCatalog> Catalogs { get; set; }

    // Можно к валидации добавить сообщение об ошибке
    [FromQuery(Name = "status")]
    [EnumBinding(ErrorMessage = "One or more of orders statuses is incorrect.")]
    public IEnumerable<Status> Statuses { get; set; }
}

Так же аттрибуты используются в качестве валидационных аттрибутов, они проверяют, что значения Enum были переданы верные.

Подключение в проект

// Подключение в проект для биндинга Query
services.AddMvc(options =>
{
    //...

    // В параметрах пережается методы биндинга по умолчанию
    options.AddMdsEnumBinder(EnumBinding.Value | EnumBinding.Description | EnumBinding.EnumMember);

    //...
})
// Подключение в проект для биндинга в теле запроса
.AddNewtonsoftJson(options =>
{
    //...

    // В параметрах пережается методы биндинга по умолчанию
    options.AddMdsEnumJsonConverter(EnumBinding.Value | EnumBinding.Description | EnumBinding.EnumMember);

    //...
})

Варианты биндинга

EnumBinding имеет следующие значения:

  • Value - Использовать значение Enum.
  • Name - Использовать название значения Enum.
  • Description - Использовать аттрибут Description.
  • EnumMember - Использовать аттрибут EnumMember.
  • Any - Использовать любой способ.

EnumBinding помечен как Flag, поэтому можно использовать несколько значений сразу.

public class SelectHarmonizationLinksParameters
{
    [JsonProperty("type")]
    [EnumBinding(EnumBinding.Value | EnumBinding.Description | EnumBinding.EnumMember)]
    public ContractType Type { get; set; }
}

Внимание!!! Особенности работы с IEnumerable

Когда мы прописываем аттрибут для IEnumerable технически мы тоже можем прописать способы биндинга в этом конкретном случае, но это не будет работать. Эта особенность из-за того, что внутрь биндинга для IEnumerable не передается информация об аттрибутах. Поэтому, для IEnumerable всегда будет использоваться поведение по умолчанию, заданное при подключении библиотеки в проект. Поэтому, можете не указывать флаги в таких случаях.

public class SelectHarmonizationLinksParameters
{
    [FromQuery(Name = "catalog")]
    // Можно прописать любые флаги - они будут игнорироваться, поэтому лучше не писать никаких флагов
    [EnumBinding(EnumBinding.Description)] // Так лучше не писать
    [EnumBinding] // Рекомендую писать так, НО только для IEnumerable иил других Generic от Enum
    public IEnumerable<HarmonizationLinkCatalog> Catalogs { get; set; }
}

No packages depend on Mds.Libraries.CSharp.EnumBinding.

Version Downloads Last updated
2.1.1 2 02/28/2026
2.1.0 1 02/28/2026
2.1.0-beta.11150 1 02/28/2026
2.0.0 1 02/28/2026
1.0.0 1 02/28/2026