【问题标题】:Converting from One Class to another Class using Xml Serialization in C#在 C# 中使用 Xml 序列化从一个类转换为另一个类
【发布时间】:2009-11-02 07:11:21
【问题描述】:

在我们的项目中,我们使用 basicHttpBinding 将在 Central 位置公开的 WCF Web 服务作为服务使用。

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

但是,我需要将 web 服务提供的数据/类转换为我的本地类,因为现在我正在对 web 服务提供的那些类/对象进行 xmlserializing 并反序列化到我的本地类中,因为两个类模式完全匹配。

我有什么更好的方法吗? 或者 我需要将每个属性从一个类分配给另一个类吗?

谢谢 nRk。

【问题讨论】:

  • 如果您使用 WCF,则不应使用 WSDL.EXE,而应使用 svcutil.exe

标签: c# web-services type-conversion


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

  • 试试Automapper

【讨论】:

  • 感谢您的早日回复,手动意味着..我有很多课程,它自己需要很多时间。并检查“Automapper”谢谢。
【解决方案2】:

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

如果您无法控制定义本地类,那么您必须定义一个转换器,或者如 Elder_george 所述,使用 AutoMapper。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      一些想法:

      • 通过 WCF 使用程序集共享;这允许您在两端使用相同的实际组件。只要这是一个 DTO 程序集,就可以了(虽然不是很便携)。这是svcutil.exe 中的/reference(也是/r),或者您可以通过IDE 完成
      • 使用DataContractSerializer 和往返(就像您已经使用的那样;只是WCF 最接近于DataContractSerializer,而不是XmlSerializer

      【讨论】:

      • 谢谢.. 但是在客户端我只使用 .net 2.0,我不能使用 svcutil.exe.. 和 DataContractSerializer。
      猜你喜欢
      • 2016-04-03
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多