微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 实现2个类似类的更好方法

我使用C#从 the XPDL standard导入和导出.

我已经使用XPDL 2.1为类编写了层次结构,并使用XmlSerializer调试了序列化.我需要实现XPDL 2.2.

类的结构已经改变了.还有其他参数.有一些Artifacts列表是根类的子类,但是较新的版本从所有Artifacts中丢失了DataObject. DataObjects从另一个List移动​​到WorkflowProcess.

我需要支持XPDL 2.1XPDL 2.2.实现这两者的最佳方法是什么?

我可以看到3种方式:

>使用所需的修复复制并粘贴现有的层次结构(非常糟糕!)
>创建基类并创建两个子类.一个用于2.1,另一个用于2.2(但维护不是太复杂吗?)
>使用枚举变量实现条件序列化.该类将包含2.1和2.2的超集(此选项似乎过于复杂)

如果有更好的方法,请告诉我.

解决方法

解决方案中创建另外两个单独的项目.第一个应包含要从XPDL 2.1解析的类.

第二个是2.2,它应该包括一个项目文件夹中的所有cs文件作为链接.而不是手动管理它们将这些行添加到第二个项目文件

<Compile Include="..\ParserXPDL21\Classes\**\*.cs">
  <Link>Classes\file.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并检查在反序列化之前.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐