1

我正在生成类,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 消息,它们有不同的版本,我们必须能够将内容序列化和反序列化到我们的内部系统中。

4

2 回答 2

0

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

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

于 2013-08-20T08:03:04.833 回答
0

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

于 2013-08-20T08:06:49.140 回答