update:反射获取枚举类型
This commit is contained in:
23
Api/Ewide.Core/Service/Dict/Dto/EnumDictOutput.cs
Normal file
23
Api/Ewide.Core/Service/Dict/Dto/EnumDictOutput.cs
Normal 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; }
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user