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{
//代码
}