我还是ASP.NET世界的新手,所以我可以离开这里,但到目前为止这是我(有限的)知识的最佳选择!
假设我在Business命名空间中有一个标准的业务对象“Contact” 。我编写了一个Web服务来从数据库中检索联系人的信息,并将其返回。然后我写了一个客户端应用程序来请求所述细节。
现在,我还创建了一个实用程序方法,它接受“联系”并用它做一些魔法,Utils.BuyContactNewHat()
比如说。当然需要类型的联系人Business.Contact
。
然后我回到我的客户端应用程序并想要使用该BuyContactNewHat
方法,所以我添加了对我的Utils命名空间的引用,并且它就是。但是,出现了一个问题:
Contact c = MyWebService.GetContact("Rob);
Utils.BuyContactNewHat(c); // << Error Here
由于返回类型GetContact
是MyWebService.Contact
和不Business.Contact
符合预期的。我理解为什么会这样,因为在访问Web服务时,您实际上是在编写WSDL生成的代理类。
那么,是否有一种“更容易”的方式来处理这种类型的不匹配?我正在考虑尝试创建一个通用的转换器类,它使用反射来确保两个对象具有相同的结构,而不是简单地将值从一个传递到另一个。
发布于 2019-05-20 15:07:27
你走在正确的轨道上。要将代理对象的数据恢复到您自己的对象之一,您必须执行左手右侧代码。即复制属性值。我敢打赌,你已经有了一种使用反射的通用方法。
如果他们只想通过网络获取业务对象,有些人将使用除Web服务(.net远程处理)之外的其他东西。或者他们将使用二进制序列化。我猜你正在使用网络服务是有原因的,所以你必须进行财产复制。
发布于 2019-05-20 16:00:28
实际上,您不必使用WSDL为您提供的生成的类。如果你看看它生成的代码,它只是调用一些.NET框架类来提交SOAP请求。在过去,我已将该代码复制到普通的.cs文件中并对其进行了编辑。虽然我没有特别尝试过,但我没有理由不放弃代理类定义并使用原始类来接收SOAP调用的结果。它必须已经在引擎盖下做反射,这样做两次似乎是一种耻辱。
https://stackoverflow.com/questions/-100001165
复制相似问题