在我的应用程序的一个部分中,我使用从 xsd 方案生成的类型——我有 2008 和 2009 两种模式的版本——我使用的类型是 DatumType——在每个方案中,这种类型都包含相同的属性——它们是准确的,除了命名空间。有什么办法可以将 DatumType (2008) 转换为 DatumType (2009),这样我就可以在我的应用程序中只使用一种类型,而不是两种?
我正在使用 c# 并赢得表格,谢谢!
不,没有办法将一种转换为另一种,因为就编译器所知,这是两种不相关的类型。
如果目标类型的字段是可分配的,您可以编写一个使用反射来复制字段的简短方法。
您还可以构建将源类型的对象保存为 XML 并将该 XML 读入目标类型的对象的代码。这稍微脆弱一些,因为它依赖于相同字段的存在以及它们以相同方式转换为 XML 的事实。
您可以使用更正名称空间差异的简单 XSLT 预处理您的 XML 文件。
Identity的第 2 部分的第 1 部分解释了如何做到这一点。基本上,转换具有匹配元素并为每个匹配元素提供输出的模板。诀窍是有一个特定的模板来匹配 Datum 元素并转换它们,以及一个匹配所有类型的元素并简单地复制它们的通用转换。
如果您没有使用 XSLT 的经验,请不要害怕。它比你想象的更容易学习。您可以使用XSLT 教程之类的教程,它可以让您理解“身份”的解释。
您可以使用XslCompiledTransform 类来应用转换。
在我看来,最简单的做法是构建一个小方法来将一种类型转换为另一种类型(因为它们都共享属性),或者,如果您可以访问源代码,则实现一个接口,以便您可以使用两个类作为该接口。
换句话说,如果我们有两个类,B 和 C,它们继承接口 A(它包含我们感兴趣的所有属性),我们可以将这两个类的任何对象类型转换为 A。