【问题标题】:Parse WCF response to custom object解析 WCF 对自定义对象的响应
【发布时间】:2017-01-10 11:26:06
【问题描述】:

请看下面的代码:

public Form1()
        {
            ServiceReference1.Service1Client s1 = new ServiceReference1.Service1Client();
            Person p1 = s1.GetPerson();
        }

我得到的编译时错误是:“无法将类型'app.ServiceReference1.Person'隐式转换为'WcfService1.Person'。我了解此错误的原因。服务器上有一个Person对象和一个人对象在客户端上,它们位于不同的命名空间中。

你如何解决这个问题。我不能只要求 WCF 服务器开发人员向我发送 Person 类。

我正在为 WCF Web 服务寻找类似的东西:JSON not parsed into custom object

我不明白为什么框架会对 WCF Web 服务返回的 XML 进行消毒。 WCF 的全部意义在于它应该是可互操作的。

【问题讨论】:

标签: c# wcf


【解决方案1】:

如果所有对象属性的名称相同,您可以使用 AutoMapper 将值复制到本地对象,或者手动执行:

public Form1()
{
    ServiceReference1.Service1Client s1 = new ServiceReference1.Service1Client();
    var dto = s1.GetPerson();
    var p1 = new Person()
    {
        x = dto.x,
        y = dto.y,
        z = dto.z
    };
}

【讨论】:

  • 感谢 Automapper 参考。 +1。
【解决方案2】:

如果服务是内部提供的,供应商也应该为您提供数据合同,至少在 dll 中。

否则,您可以通过 Visual Studio 的服务参考生成器工具创建您的服务参考,它会为您创建正确的数据合同。

如果您正在编写自己的服务,请确保您已创建具有必要属性的 dto 对象。

[DataContract]
public class Person
{
    [DataMember]
    public int SampleField { get; set; }
}

【讨论】:

  • 它将如何:“为您创建正确的数据合同”?它不会创建 Person 类。
  • 嗯,应该的。 Person 类是服务和客户端之间的信封对象。因此,它的属性应该在库中或从 wsdl 文件中提供。如果它仅由 wsdl 提供,则服务引用生成器工具应该处理它们。
  • 谢谢。您将如何在 WSDL 文件中提供它?
  • 当您发布 wcf 服务时,会自动生成 wsdl。按照您发布的网址进行操作,您将拥有它。 - 如果你做对了。
  • 我明白这一点,但是表明您会在客户端获取 WSDL 人员值并将它们加载到客户端的对象中吗?再次感谢。
猜你喜欢
  • 2019-08-23
  • 2012-07-07
  • 2011-08-09
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多