我正在从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消息,它们有不同的版本,我们必须能够将内容序列化和反序列化到我们的内部系统中。
答案 0 :(得分:0)
我们还没有找到这个特定问题的解决方案,并选择使用AutoMapper,它似乎以不同的方式解决了我们的问题。
我们制作了一个工具,它接受生成的类并通过汇编创建AutoMapper所需的映射类。如果你有大型生成的类,你也可以这样做。我们现在可以创建映射类所需的数千行代码。它解决了将“对象”类型映射到特定类时遇到的问题。我不知道它是否有用,但确实如此。
答案 1 :(得分:0)
想法非常简单。工厂不会关心版本。但是较新的客户端将始终支持旧版本的功能。如果版本0.5有一个接收订单列表的方法(例如这是一个购物应用程序)版本0.6也应该有相同的方法。我们有相同的结构,我们正在这样做。