Решено!Как получить данные с перечислением в виде строки (EF Core) - PullRequest
0 голосов
/ 14 марта 2019

[решено] Как я могу получить пол в виде строки типа «пол»: «мужчина» в моем jsonResult, я использую EntityFramework Core 2.2 с проектом Asp.net core 2.2. У меня возникли проблемы с enum, но в этом примере enum возвращает строку вместо int (https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-types/enums)

Моя модель Сотрудник

public class Employee
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public DateTime Birthdate { get; set; }
        public Genders Gender { get; set; }
    }

Конфигурация моего сотрудника

public void Configure(EntityTypeBuilder<Employee> builder)
    {
        builder.ToTable("Employee", "HR");
        builder.Property(e => e.Id)
            .ValueGeneratedOnAdd();
        builder.Property(e => e.FirstName)
            .IsRequired()
            .HasMaxLength(50);
        builder.Property(e => e.MiddleName)
            .IsRequired()
            .HasMaxLength(50);
        builder.Property(e => e.LastName)
            .IsRequired()
            .HasMaxLength(50);
        builder.Property(e => e.Birthdate)
            .HasColumnType("Date");
        builder.Property(e => e.Gender)
            .HasConversion(
                g => g.ToString(),
                g => (Genders)Enum.Parse(typeof(Genders), g));

}

My enum Пол

    public enum Genders
    {
        Unknown,
        Male,
        Female
    }

Мой репозиторий

    public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
    {
        protected readonly DbContext Context;
        private readonly DbSet<TEntity> _entities;

        public Repository(DbContext context)
        {
            Context = context;
            _entities = Context.Set<TEntity>();
        }

        public async Task<IEnumerable<TEntity>> ToListAsync()
        {
            return await _entities.ToListAsync();
        }
}

Мой API-контроллер

        [HttpGet]
        [ProducesResponseType(StatusCodes.Status200OK)]
        public async Task<IEnumerable<Employee>> Get()
        {
            return await _employees.ToListAsync();
        }

Мой результат

[
  {
    "id": 2,
    "firstName": "First Name 1",
    "middleName": "Middle Name 1",
    "lastName": "Last Name 1",
    "birthdate": "1991-10-04T00:00:00",
    "gender": 1 // I Want this result "gender": "Male"
  }
]

Решение: я добавляю это в свой startup.cs

.AddJsonOptions(options =>
                {
                    options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());

                });
...