c# – 无法将MyObject类型的对象强制转换为MyObject类型
发布时间:2020-12-15 08:25:06 所属栏目:百科 来源:网络整理
导读:我有这种情况,我在C#中使用的Web服务方法返回一个Business对象,当使用以下代码调用webservice方法时,我在reference.cs类中得到异常“无法将ContactInfo类型的对象强制转换为类型ContactInfo”的网络参考 码: ContactInfo contactInfo = new ContactInfo();C
我有这种情况,我在C#中使用的Web服务方法返回一个Business对象,当使用以下代码调用webservice方法时,我在reference.cs类中得到异常“无法将ContactInfo类型的对象强制转换为类型ContactInfo”的网络参考
码: ContactInfo contactInfo = new ContactInfo(); Contact contact = new Contact(); contactInfo = contact.Load(this.ContactID.Value); 任何帮助将非常感激. 解决方法
这是因为其中一个ContactInfo对象是Web服务代理,并且位于不同的命名空间中.
这是asmx风格的Web服务的一个已知问题.在过去,我已经实现了自动浅拷贝来解决它(here’s how,虽然如果我再次这样做,我可能会看一下AutoMapper). 例如,如果您有一个包含以下类的程序集: MyProject.ContactInfo 并从web方法返回它的实例: public class DoSomethingService : System.Web.Services.WebService { public MyProject.ContactInfo GetContactInfo(int id) { // Code here... } } 然后,当您将Web引用添加到客户端项目时,实际上是这样的: MyClientProject.DoSomethingService.ContactInfo 这意味着如果在您的客户端应用程序中调用Web服务来获取ContactInfo,则会出现以下情况: namespace MyClientProject { public class MyClientClass { public void AskWebServiceForContactInfo() { using (var service = new DoSomethingService()) { MyClientProject.DoSomethingService.ContactInfo contactInfo = service.GetContactInfo(1); // ERROR: You can't cast this: MyProject.ContactInfo localContactInfo = contactInfo; } } } } 它是在我使用我的ShallowCopy类的最后一行: namespace MyClientProject { public class MyClientClass { public void AskWebServiceForContactInfo() { using (var service = new DoSomethingService()) { MyClientProject.DoSomethingService.ContactInfo contactInfo = service.GetContactInfo(1); // We actually get a new object here,of the correct namespace MyProject.ContactInfo localContactInfo = ShallowCopy.Copy<MyClientProject.DoSomethingService.ContactInfo,MyProject.ContactInfo>(contactInfo); } } } } 注意这只能起作用,因为代理类和“真实”类具有完全相同的属性(一个是由Visual Studio生成的). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |