这是因为其中一个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
这意味着,如果你在客户端AP折叠,调用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生成的)。
您是否最近更新了您的Web引用? – womp 2009-09-17 15:52:21