C# 在工厂中处理不同版本的类

C# 在工厂中处理不同版本的类,c#,.net,factory,versions,C#,.net,Factory,Versions,我正在从XSD生成类,需要将类填充到序列化为xml 我有不同的类,包含生成的类中的所有信息 问题是生成的类有不同的版本,而这些类中的属性是同一版本中的其他类 class LocalData { public MyClass property { get; set; } } class XmlVersion1 { public MyClassV1 property { get; set; } } class XmlVersion2 { public MyClassV2 pro

我正在从
XSD
生成类,需要将类填充到序列化为xml

我有不同的类,包含生成的类中的所有信息

问题是生成的类有不同的版本,而这些类中的属性是同一版本中的其他类

class LocalData
{
   public MyClass property { get; set; }
}

class XmlVersion1
{
   public MyClassV1 property { get; set; }
}

class XmlVersion2
{
   public MyClassV2 property { get; set; }
   public MyClassXV2 newProperty { get; set; }
}
MyClassV1
V2
中的数据基本相同,因此可以使用相同的代码

我想创建一个工厂,它只接受
LocalData
类和任何版本化类,并在版本化类中填充数据,但当我想执行
property=new MyClassVx
时,我遇到了一个问题,因为工厂不知道它应该创建哪个版本

我可以

if (parameter is MyClassV1)
   paramter.MyClassV1 = new MyClassV1
以此类推,但这是很多代码


这用于生成外部公司指定的xml消息,这些消息有不同的版本,我们必须能够将内容序列化和反序列化到我们的内部系统中。

我们还没有找到解决此特定问题的方法,而是选择使用AutoMapper,它似乎以不同的方式解决了我们的问题


我们制作了一个工具,用于获取生成的类,并通过汇编创建AutoMapper所需的映射类。如果您有大型生成类,您也可以这样做。我们现在可以创建映射类所需的数千行代码。它解决了我们在将“对象”的类型映射到特定类时遇到的一个问题。我不知道它是否有用,但它确实有用。

这个想法很简单。工厂将不关心版本。但较新的客户端将始终支持旧版本的功能。如果版本0.5有接收订单列表的方法(例如,这是一个购物应用程序),那么版本0.6也应该有相同的方法。我们有同样的结构,我们正在这样做