使用C#中的Xml序列化从一个类转换为另一个类

时间:2009-11-02 07:11:22

标签: c# web-services type-conversion

在我们的项目中,我们使用 basicHttpBinding 来消费在中心位置公开的WCF网络服务作为服务。

在客户端桌面应用程序中,我们需要使用这些Web服务。我可以使用WSDL.exe生成代理类。

但是,我需要将webservice给出的数据/类转换为我的本地类,因为现在我将xmlserialzing由webservice给出的那些类/对象并反序列化到我的本地类中,因为两个类模式完全匹配。

有什么更好的方式可以关注吗? 要么 我是否需要将每个属性从一个类分配给另一个类?

感谢 NRK。

4 个答案:

答案 0 :(得分:3)

  • 手动声明类而不是生成。这是最干的解决方案。

  • 尝试Automapper

答案 1 :(得分:1)

如果您可以控制本地类(它们不是生成代码;或者您自己生成它们),则可以使用xml属性来装饰类,这样您就可以将它序列化并反序列化为您使用的xml和您不必具有属性的特定名称。除此之外,您可能还有本地课程的其他属性。

如果您无法控制定义本地类,那么您必须定义转换器或提到的elder_george,请使用AutoMapper。

使用手动编写的转换器IMO是最快的方法,您可以将它们定义为本地类的隐式转换器运算符。

答案 2 :(得分:0)

我自己就像你一样完成了序列化/反序列化。如果您的类具有与代理类相同的属性,则可以编写一个帮助器方法,该方法使用反射来遍历代理的属性并设置类的相应属性。只要属性名称相同,那么一个方法应该适用于所有类。

答案 3 :(得分:0)

一些想法:

  • 通过WCF使用程序集共享;这允许您在两端使用相同的实际装配。只要这是一个DTO组件,这很好(虽然不是非常便携)。这是/reference中的/r(也是svcutil.exe),或者您可以通过IDE进行此操作
  • 使用DataContractSerializer和往返(就像您已经;只是WCF最贴近DataContractSerializer,而不是XmlSerializer