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