c# - 无法将类型为 MyObject 的对象转换为类型 MyObject

标签 c# web-services

我有这种情况,我在 C# 中使用的 web 服务方法返回一个业务对象,当使用以下代码调用 web 服务方法时,我在引用中得到异常“无法将类型为 ContactInfo 的对象转换为类型 ContactInfo” Web 引用的 .cs 类

代码:

ContactInfo contactInfo = new ContactInfo();
Contact contact = new Contact();

contactInfo = contact.Load(this.ContactID.Value);

任何帮助将不胜感激。

最佳答案

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

这是 asmx 风格的网络服务的一个已知问题。过去我实现了自动浅拷贝来解决它( here's how ,尽管如果我再做一次,我可能会改用 AutoMapper)。

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

MyProject.ContactInfo

然后您从网络方法返回它的一个实例:

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 从另一个生成)。

关于c# - 无法将类型为 MyObject 的对象转换为类型 MyObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1439703/

相关文章:

c# - 无法为 GridView 中动态创建的按钮连接 Click 事件

c# - 如何在 dot net 中使用免注册 COM dll

web-services - 从 UPC 代码查找产品类别

java - Coldfusion 使用 Dynamics NAV Web 服务

java - 签署 SOAP 消息期间的 WSS4j 元素顺序

c# - 需要创建存储过程但有问题

c# - 用于刷新页面和/或 telerik 网格的 JavaScript 代码

c# - 如何在 AppDomain 下创建类的新实例

web-services - REST Web 服务的客户端 id 生成策略

PHP REST API Webservice 与图像的正确使用?