调用WebService方法,报错:无法序列化 DataTable。未设置 DataTable 名称。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用WebService方法,报错:无法序列化 DataTable。未设置 DataTable 名称。相关的知识,希望对你有一定的参考价值。

错误信息如下:

WebService方法如下:
方法一:把DataTable转成了DataSet ,但是还是报如上图的错

[WebMethod]
public DataSet get_report_data_ds(string strName_rpt, rptInput_info pInput)

DataTable dt = new DataTable();
dt.TableName = "dtReport1";
Fill_Report c_Report = new Fill_Report(0);
dt = c_Report.get_report_data(strName_rpt, pInput);//该方法返回的是DataTable
DataSet ds = new DataSet("dsDefault");
ds.Tables.Add(dt);
return ds;


方法二:把DataTable转成了XML,调用时也报如上图的错
[WebMethod] public string get_report_data_xml(string strName_rpt, rptInput_info pInput)

DataTable dt = new DataTable();
dt.TableName ="dtReport";
Fill_Report c_Report = new Fill_Report(0);
dt = c_Report.get_report_data(strName_rpt, pInput);//该方法返回的是DataTable
return CDataToXml(dt);//该方法是把dt转换成XML

/// <summary> /// 将DataTable对象转换成XML字符
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string CDataToXml(DataTable dt)

……
这是调用get_report_data_xml方法报的错

参考技术A 错误已经说的很清楚了,不支持DataTable的序列化,
也就是说,WebService不能返回DataTable

然后你说返回string,还报上面的错,那不可能的,应该是你没有编译吧追问

我那两个方法,第一个返回的是DataSet,第二个返回的是xml字符,关于这一点,看我上面代码的返回类型就知道了,没有返回DataTable的。那个XML的方法也编译过了。

追答

你的 rptInput_info 类里是不是有DataTable的属性?

另外,你可以考虑用WCF来代替WebService

参考技术B ...你去给DataTable个TableName就行了...上面写的不是很清楚么
想序列化DataTable,这个DataTable需要有名字的。
DataSet其实就是DataTable的集合,同理。追问

我上面贴的代码,已经是把DataTable和DataSet设置名字了

追答

你的名字可以后给么?你在Get方法里面已经改变这个对象了,这个你可明白?

追问

放后面了,依旧报那个错

追答

。。。。没搞错吧
来加我瞅瞅。 124033472

追问

我找到原因了,是参数的问题,参数rptInput_info是个结构体,这个结构里有个DataTable。o(︶︿︶)o

谢谢你啦

本回答被提问者采纳
参考技术C datatable不支持序列化,直接返回到dataset吧。追问

方法一的返回值本来就是dataset,不是datatable。

参考技术D 类DataTable 加上implements Serializable,希望对你有用~ 第5个回答  2013-04-18 你没有设置table的名称

axis2调用webservice教训

总结教训,axis2client调用WS接口时url不能加?wsdl,而用cxf调用时则要加上。

今天用axis2的RpcServerClient调用https的webservice接口,在设置完option参数后总是保错server response failed,而服务器肯定没问题,想尽各种办法搜资料都无法解决,最后网上看到一句话出现这个报错要么是服务不在线,要么是url错了,突然想到把url中的?wsdl试试,果然成功。收前两天cxf调用成功影响,url直接拷贝以为没问题,没想到出现这个问题浪费了几个小时调试时间。

以上是关于调用WebService方法,报错:无法序列化 DataTable。未设置 DataTable 名称。的主要内容,如果未能解决你的问题,请参考以下文章

采用WebService客户端调用WSDL/SOAP网络报错的解决办法

python用suds 调用webservice方法的时候报错。

nodejs调用webservice接口返回500是啥原因

调用webservice接口,报错:(十六进制值0x01)是无效的字符

C#调用webService报错,该怎么处理

abap 调用webservice 报错