WebService错误对象强制转换

1.法将对象强制转换为类型System.Xml.XmlNode[]。

使用C#调用Web服务时,曾经出现无法将对象强制转换为类型System.Xml.XmlNode[]。

出现这个错误主要是引用Web服务XmlInclude特性导致的。下面用个例子展示一下:

WebService方法如下:

[WebMethod]
[SoapHeader("MySoapHeader", Direction = SoapHeaderDirection.In)]
[XmlInclude(typeof(UserInfos))]  //这一句是返回的IList中对象是UserInfos
public IList GetUserByID(int iUserID)
{
       try
       {
          return Mapper.Instance().QueryForList("GetUserByID",iUserID); //IBatis.Net返回列表

、    }
       catch (Exception ex)
       {
            throw WSException.GetException(ex);
        }
 }

解决办法:

在引用WebService的项目下,找到文件夹Web References下的WebService,双击出现对象浏览器,

再找到下面你的工程,工程下面可以看见WebService名字,双击它,会打开Reference.cs,或者直接打开

\工程\Web References\WebService名字\Reference.cs.

[System.Xml.Serialization.XmlIncludeAttribute(typeof(UserInfos))]
--加上这个特性,返回的UserInfos[]类型,如果去掉特性这一行,那么返回的就是XmlNode[]
public partial class WSUserManagement : System.Web.Services.Protocols.SoapHttpClientProtocol
{
  //代码
}

2.无法将类型为“MyProject.WSUser.User”的对象强制转换为类型“MyCommom.Model.User”
这时候注意检查:\Web References\Reference.cs,看看是不是没有删除类User。

示例代码如下,把下面代码删除,重新编译看看。

/// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3082")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")]

public partial class User{

//代码

}

你可能感兴趣的:(webservice)