zoukankan      html  css  js  c++  java
  • WebService返回DataTable

    http://blog.csdn.net/wxnjob/article/details/8638420

    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

  • 相关阅读:
    第23条:通过委托与数据源协议进行对象间通信
    第22条:理解NSCopying协议
    第21条:理解Objective-C错误模型
    第20条:为私有方法名加前缀
    《隐藏键盘》《隐藏PickerView控键》如果是xib中 点击空白处隐藏键盘
    《弹出提示》UIAlertView 弹出提示
    MAC 问题。
    小技巧
    控制器的生命周期
    问题。控制器跳转
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/6042760.html
Copyright © 2011-2022 走看看