update:反射获取枚举类型

This commit is contained in:
2021-07-14 11:58:00 +08:00
parent 3b41cbe89f
commit 82460caf6a
3 changed files with 60 additions and 1 deletions

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Core.Service.Dict.Dto
{
public class EnumDictOutput
{
public string FullName { get; set; }
public string Desc { get; set; }
public string Code { get; set; }
public List<EnumDictData> Datas { get; set; }
}
public class EnumDictData
{
public string Desc { get; set; }
public string Code { get; set; }
public string Value { get; set; }
}
}

View File

@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc;
using Ewide.Core.Service.Dict.Dto;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -16,5 +17,6 @@ namespace Ewide.Core.Service
Task<dynamic> GetDictTypeList();
Task<dynamic> QueryDictTypePageList([FromQuery] DictTypeInput input);
Task UpdateDictType(UpdateDictTypeInput input);
Task<List<EnumDictOutput>> GetEnumDictDataList([FromQuery] DictTypeInput input);
}
}

View File

@@ -1,4 +1,5 @@
using Ewide.Core.Extension;
using Ewide.Core.Service.Dict.Dto;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
@@ -10,7 +11,9 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
namespace Ewide.Core.Service
@@ -212,5 +215,36 @@ namespace Ewide.Core.Service
return dtype.Pids + "[" + pid + "],";
}
}
[HttpGet("/sysDictType/enumDictList")]
public Task<List<EnumDictOutput>> GetEnumDictDataList([FromQuery] DictTypeInput input)
{
var typeList = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsEnum);
typeList = typeList.Concat(Assembly.Load("Ewide.Application").GetTypes().Where(t => t.IsEnum));
var list = new List<EnumDictOutput>();
foreach (var type in typeList)
{
var dictType = new EnumDictOutput
{
Desc = type.GetCustomAttribute<DescriptionAttribute>()?.Description,
FullName = type.FullName,
Code = type.Name,
Datas = new List<EnumDictData>(),
};
var fields = type.GetFields(BindingFlags.Static | BindingFlags.Public);
foreach (var field in fields)
{
var value = field.GetValue(null);
var dictData = new EnumDictData
{
Desc = field.GetCustomAttribute<DescriptionAttribute>()?.Description,
Code = field.Name,
Value = Convert.ChangeType(value, Enum.GetUnderlyingType(value.GetType())).ToString(),
};
dictType.Datas.Add(dictData);
}
list.Add(dictType);
}
return Task.FromResult(list);
}
}
}