這是因爲其中一個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