我正在寻找某种方法来实现一些 TypeConverter ,以便将逗号分隔的字符串转换为一些通用的枚举值数组。
我正在使用
class StringToEnumList : ITypeConverter<string, Enum[]> ...
cfg.CreateMap<string, Enum[]>().ConvertUsing<StringToEnumList>(); ...
但此选项仅转换显式枚举属性类型,而不转换任何自定义枚举属性。
class MyClassSource {
public string OkProperty {get; set; }
public string FailingProperty {get; set; }
}
class MyClassTarget {
public Enum[] OkProperty {get; set; }
public CustomEnum[] FailingProperty {get; set; }
}
是否有一些策略来实现从字符串到任何自定义枚举的通用类型转换器,以避免每个自定义枚举的显式注册?也许是一些工厂或其他东西来创建检查属性目标类型的通用转换器?
您可以尝试在控制台应用程序中执行以下操作:
public enum CustomEnum
{
abc,
xyz
}
public class Source
{
public string Value1 { get; set; }
}
public class Destination
{
public CustomEnum[] Value1 { get; set; }
}
StringToEnumList.cs
public class StringToEnumList<T> : ITypeConverter<string, T[]> where T : struct, Enum
{
public T[] Convert(string source, T[] destination, ResolutionContext context)
{
List<string> ls = source.Split(',').ToList();
T[] result = new T[ls.Count];
for (int i = 0; i < ls.Count; i++)
{
result[i]= Enum.Parse<T>(ls[i]);
}
return result;
}
}
程序.cs
var configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<string, CustomEnum[]>().ConvertUsing(new StringToEnumList<CustomEnum>());
cfg.CreateMap<Source, Destination>();
});
var mapper = new Mapper(configuration);
var source = new Source
{
Value1 = "abc,xyz"
};
Destination result = mapper.Map<Source, Destination>(source);
Console.ReadLine();
(请注意,此转换器仅适用于 CustomEnum。对于纯 Enum(“OkProperty”),您可以使用您的转换器。)