Это связано с тем, что один из объектов ContactInfo
является прокси-сервером веб-службы и находится в другом пространстве имен.
Это известная проблема с веб-службами в стиле asmx. Раньше я реализовал автоматическую мелкую копию, чтобы обойти ее (here's how, хотя, если бы я делал это снова, я бы, вероятно, посмотрел на AutoMapper).
Например, если у вас есть узел со следующим классом:
MyProject.ContactInfo
и вы возвращаете его экземпляр с веб-метода:
public class DoSomethingService : System.Web.Services.WebService
{
public MyProject.ContactInfo GetContactInfo(int id)
{
// Code here...
}
}
Затем при добавлении веб-ссылки к вашему проекту клиента, вы на самом деле получаете это:
MyClientProject.DoSomethingService.ContactInfo
Это означает, что если в вашем клиенте ap складка, вы вызываете веб-службу, чтобы получить 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).
Вы обновили свой веб-справочник в последнее время? – womp