AutoMapper 字符串到枚举描述
给定要求:
获取一个对象图,根据第二个字符串属性的已处理值设置所有枚举类型属性。约定规定源字符串属性的名称将是带有后缀“Raw”的枚举属性的名称。
通过处理,我们的意思是我们需要删除指定的字符等,
我查看了自定义格式化程序、值解析器和类型转换器,其中没有一个似乎是解决此问题的方法?
我们希望使用 AutoMapper 而不是我们自己的反射例程,原因有两个,a)它在项目的其余部分中广泛使用,b)它为您提供递归遍历 ootb。
-- 示例 --
给定下面的(简单)结构,以及:
var tmp = new SimpleClass
{
CountryRaw = "United States",
Person = new Person { GenderRaw="Male" }
};
var tmp2 = new SimpleClass();
Mapper.Map(tmp, tmp2);
我们期望 tmp2 的 MappedCountry 枚举为 Country.UnitedStates,并且 Person 属性的性别为 Gender.Male。
public class SimpleClass1
{
public string CountryRaw {get;set;}
public Country MappedCountry {get;set;}
public Person Person {get;set;}
}
public class Person
{
public string GenderRaw {get;set;}
public Gender Gender {get;set;}
public string Surname {get;set;}
}
public enum Country
{
UnitedStates = 1,
NewZealand = 2
}
public enum Gender
{
Male,
Female,
Unknown
}
谢谢
Given the requirement:
Take an object graph, set all enum type properties based on the processed value of a second string property. Convention dictates that the name of the source string property will be that of the enum property with a postfix of "Raw".
By processed we mean we'll need to strip specified characters e.t.c.
I've looked at custom formatters, value resolvers and type converters, none of which seems like a solution for this?
We want to use AutoMapper as opposed to our own reflection routine for two reasons, a) it's used extensively throughout the rest of the project and b) it gives you recursive traversal ootb.
-- Example --
Given the (simple) structure below, and this:
var tmp = new SimpleClass
{
CountryRaw = "United States",
Person = new Person { GenderRaw="Male" }
};
var tmp2 = new SimpleClass();
Mapper.Map(tmp, tmp2);
we'd expect tmp2's MappedCountry enum to be Country.UnitedStates and the Person property to have a gender of Gender.Male.
public class SimpleClass1
{
public string CountryRaw {get;set;}
public Country MappedCountry {get;set;}
public Person Person {get;set;}
}
public class Person
{
public string GenderRaw {get;set;}
public Gender Gender {get;set;}
public string Surname {get;set;}
}
public enum Country
{
UnitedStates = 1,
NewZealand = 2
}
public enum Gender
{
Male,
Female,
Unknown
}
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我用 ValueInjecter 做到了,
整个事情是这样的:
我在 SimpleClass 中又添加了一个道具,只是为了向您展示它是如何工作的
,以防万一您需要从 CountryRaw 到 MappedCountry 进行操作
你可以这样做:
I did it with the ValueInjecter,
here is the whole thing:
I've added one more prop to the SimpleClass just to show you how it works
also in case you need to do it from CountryRaw to MappedCountry
you could do it like this: