c# – 实现2个类似类的更好方法
我使用C#从
the XPDL standard导入和导出.
我已经使用XPDL 2.1为类编写了层次结构,并使用XmlSerializer调试了序列化.我需要实现XPDL 2.2. 类的结构已经改变了.还有其他参数.有一些Artifacts列表是根类的子类,但是较新的版本从所有Artifacts中丢失了DataObject. DataObjects从另一个List移动??到WorkflowProcess. 我需要支持XPDL 2.1和XPDL 2.2.实现这两者的最佳方法是什么? 我可以看到3种方式: >使用所需的修复复制并粘贴现有的层次结构(非常糟糕!) 如果有更好的方法,请告诉我. 解决方法
在解决方案中创建另外两个单独的项目.第一个应包含要从XPDL 2.1解析的类.
第二个是2.2,它应该包括第一个项目文件夹中的所有cs文件作为链接.而不是手动管理它们将这些行添加到第二个项目文件: <Compile Include="..ParserXPDL21Classes***.cs"> <Link>Classesfile.cs</Link> </Compile> 每次添加或删除第一个项目时,请记住重新加载第二个项目,否则Visual Studio将不会编译它. 对于第二个项目,在项目属性中声明一个条件常量:XDPL22 现在您可以修改这样的第一个项目文件,以在同一个文件中维护两个版本: #if !XDPL22 namespace ParserXPDL21 #else namespace ParserXPDL22 #endif { [Serializable] public class Root { #if !XDPL22 public Artifact[] Artifacts { get; set; } #endif public int NormalProperty1 { get; set; } public int NormalProperty2 { get; set; } public int NormalProperty3 { get; set; } } } 之后,您可以从主项目中引用这两个项目,并使用两个不同版本的类. 我知道它似乎不是一种非常优雅的方式,但是当你必须制作大量重复代码时它会有所帮助. 您仍然需要一种方法来检查您要阅读的XPDL版本.可能你只能查看文件扩展名,但如果它是相同的,你可以尝试阅读2.2,如果它抛出异常或数据不正确认为这是2.1,或者你可以用XmlReader手动读取XML并检查在反序列化之前. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |