webservice返回datatable时报序列化错误
以下三种方案的实质应该都是序列化的,有一位大神说过“跨进程的不序列化应该去面壁!”O(∩_∩)O哈哈哈~
解决方案一:返回dataset
WebService中的方法代码如下:
[WebMethod]
public DataSet GetDataSet()
{
DataTable dt=new DataTable("mytable");
DataColumn dc=new DataColumn("id",typeof(string));
dt.Columns.Add(dc);
DaTarow dr=dt.NewRow();
dr["id"]="1111111";
dt.Rows.Add(dr);
DataSet ds=new DataSet();
ds.Tables.Add(dt);
return ds;
}
在调用客户端直接使用DataSet
DataSet ds = db.GetDataSet();//db是服务代理类实例
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
解决方案二:给返回的datatable命名
webservice文件中
[WebMethod]
public DataTable dt()
{
DataTable dt = new DataTable("default");
dt.Columns.Add("id");
dt.Columns.Add("name");
for (int i = 0; i < 10; i++)
{
DaTarow dr = dt.NewRow();
dr["id"] = i.ToString();
dr["name"] = "name" + i.ToString();
dt.Rows.Add(dr);
}
return dt;
}
WebService1.WebService1 service = new WebService1.WebService1();
DataTable dt = service.dt();
gvUser.DataSource = dt;
gvUser.DataBind();
最关键的是在webservice的方法中为datatable命名,否则就会报错.
解决方案三:服务中将DataTable的序列化成xml字符串,调用时候在反序列化成DataTable
#region DataTable序列化和反序列化 /// <summary> /// DataTabletoXML /// </summary> public static string ConvertDataTabletoXML(DataTable dt) { return ConvertDataTabletoXML(dt,string.Empty); } public static string ConvertDataTabletoXML(DataTable dt,string aaa) { StringWriter sw = null; try { if (dt.TableName == string.Empty) dt.TableName = "table1"; sw = new StringWriter(); dt.WriteXml(sw,XmlWriteMode.WriteSchema); return sw.ToString(); } catch (System.Exception ex) { throw ex; } finally { if (sw != null) sw.Close(); } } /// <summary> /// XMLToDataTable /// </summary> public static DataTable ConvertXMLToDataTable(string xmlData) { TextReader sr = null; try { DataTable dt = new DataTable(); sr = new StringReader(xmlData); dt.readxml(sr); return dt; } catch (System.Exception ex) { throw ex; } finally { if (sr != null) sr.Close(); } } #endregion
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。