我们最近引入了一种全新的数据模型,从逻辑结构的角度来看,该模型与我们当前的模型不同。我们还将模型的语言从德语更改为英语,因为我们希望以XML形式向客户开放模型结构。
为了能够转换模型,我们实现了一个显式转换,基本上将新模型的不同类的所有属性匹配到我们的旧模型中。
如下所示:
private OldModel Convert(NewModel src)
{
var dst = new OldModel();
dst.Prop1 = src.SomeOtherProp
dst.Prop2 = Convert(src.ComplexProp);
//....
return dst;
}现在我们要确保,新模型的所有属性都写入了旧模型中,用于覆盖和测试目的。我们还希望确保我们没有忘记任何属性,并保证对于未来的模型扩展,我们不会忘记一个属性。
我的想法是解析codefile,提取从新模型读取的所有属性,通过反射在新模型上运行,将它们与其中的实际属性进行比较。
这个解决方案感觉不太好:-)有什么建议吗?
感谢大家的帮助!
发布于 2012-11-27 15:35:11
我们最终决定使用如下的正则表达式来解析codefile:
@"private static [a-zA-Z0-9.]+[ ]+Convert[(][^)]*[)]\s*[{](?<body>[^{}]*(((?<Open>[{])[^{}]*)+((?<Close-Open>[}])[^{}]*)+)*(?(Open)(?!)))[}]";它将匹配像这个private static Namespace.ClassName Convert(Namespace.ClassName input)这样的方法,并提取方法体。由于转换器方法遵循简单的结构模式,因此很容易提取我需要的信息。
发布于 2012-11-27 07:59:13
我建议使用像AutoMapper这样的映射库。它们允许配置映射、转换器,并使用公共属性和特定methods进行操作。
https://stackoverflow.com/questions/13524903
复制相似问题