我有一个相当冗长的对象,它有很多属性,我用它将数据传输到SQL数据库。现在,我想提供这个对象的一个“轻量级”版本,它只使用了冗余对象的一些属性。
我使用轻量对象通过REST api提供数据,使用详细对象传输数据,所以理想情况下我也可以颠倒这个过程(用轻量对象的现有属性覆盖详细对象的属性,然后保存到数据库)。
所有这些属性都将具有相同的数据类型,只要它们存在于灯光对象中。
简单的例子:
class Verbose {
public string email;
public Guid id;
}
class Simple {
public string email;
// don't show Guid
}现在我想把所有Verbose类型的对象都转换成Simple类型,去掉所有不必要的属性--有没有简单的方法呢?
理想情况下,这也应该是可逆的。
发布于 2012-07-25 16:58:13
您可以编写一个接受详细对象的构造函数,反之亦然。
public Verbose(Simple simple)
{
this.id = Guid.NewGuid();
this.email = simple.email;
}
public Simple(Verbose verbose)
{
this.email = verbose.email;
}这样,您可以将所有的转换放在一个地方,至少每个转换方向都是如此。
这里的问题可能会让你感兴趣:How to write a converter class? How to efficiently write mapping rules?
与操作同样重要的编辑
Verbose =>简单
如果Simple是Verbose的子集,那么只需从Simple派生Verbose。这里不需要转换。
Verbose 是一种简单的。
发布于 2012-07-25 17:00:30
可以使用反射遍历对象并读取其特性值。在您的类中添加此函数
private IEnumerable<PropertyInfo> GetValidInfoes()
{
foreach (PropertyInfo info in GetType().GetProperties())
{
if (info.CanWrite)
yield return info;
}
}在对你有意义的地方添加这个循环。
foreach (var item in GetValidInfoes())
{
var source = myobject.GetType().GetProperty(item.Name);
if (source != null)
item.SetValue(this, source.GetValue(item.Name, item.PropertyType), null);
}发布于 2012-07-25 16:52:30
试试AutoMapper。如果您不使用展平,它可以是可逆的。
https://stackoverflow.com/questions/11645927
复制相似问题