c# – 无法将MyObject类型的对象强制转换为MyObject类型

前端之家收集整理的这篇文章主要介绍了c# – 无法将MyObject类型的对象强制转换为MyObject类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这种情况,我在C#中使用的Web服务方法返回一个Business对象,当使用以下代码调用webservice方法时,我在reference.cs类中得到异常“无法将ContactInfo类型的对象强制转换为类型ContactInfo”的网络参考

码:

  1. ContactInfo contactInfo = new ContactInfo();
  2. Contact contact = new Contact();
  3.  
  4. contactInfo = contact.Load(this.ContactID.Value);

任何帮助将非常感激.

解决方法

这是因为其中一个ContactInfo对象是Web服务代理,并且位于不同的命名空间中.

这是asmx风格的Web服务的一个已知问题.在过去,我已经实现了自动浅拷贝来解决它(here’s how,虽然如果我再次这样做,我可能会看一下AutoMapper).

例如,如果您有一个包含以下类的程序集:

  1. MyProject.ContactInfo

并从web方法返回它的实例:

  1. public class DoSomethingService : System.Web.Services.WebService
  2. {
  3. public MyProject.ContactInfo GetContactInfo(int id)
  4. {
  5. // Code here...
  6. }
  7. }

然后,当您将Web引用添加到客户端项目时,实际上是这样的:

  1. MyClientProject.DoSomethingService.ContactInfo

这意味着如果在您的客户端应用程序中调用Web服务来获取ContactInfo,则会出现以下情况:

  1. namespace MyClientProject
  2. {
  3. public class MyClientClass
  4. {
  5. public void AskWebServiceForContactInfo()
  6. {
  7. using (var service = new DoSomethingService())
  8. {
  9. MyClientProject.DoSomethingService.ContactInfo contactInfo = service.GetContactInfo(1);
  10.  
  11. // ERROR: You can't cast this:
  12. MyProject.ContactInfo localContactInfo = contactInfo;
  13. }
  14. }
  15. }
  16. }

它是在我使用我的ShallowCopy类的最后一行:

  1. namespace MyClientProject
  2. {
  3. public class MyClientClass
  4. {
  5. public void AskWebServiceForContactInfo()
  6. {
  7. using (var service = new DoSomethingService())
  8. {
  9. MyClientProject.DoSomethingService.ContactInfo contactInfo = service.GetContactInfo(1);
  10.  
  11. // We actually get a new object here,of the correct namespace
  12. MyProject.ContactInfo localContactInfo = ShallowCopy.Copy<MyClientProject.DoSomethingService.ContactInfo,MyProject.ContactInfo>(contactInfo);
  13. }
  14. }
  15. }
  16. }

注意这只能起作用,因为代理类和“真实”类具有完全相同的属性(一个是由Visual Studio生成的).

猜你在找的C#相关文章