您现在的位置:首页 >> 软件开发 >> 内容

asmx接口返回JSON串被加上XML外壳的解决办法

时间:2026-04-29 14:51:44 点击:

  核心提示:在asmx的方法调用中,如果方法要求有返回值,那在return JSON字符串时,JSON串会被加上XML外壳,所以在接收端接收时,要先去掉XML外壳,代码如下 // 转成DataTable Data...

在asmx的方法调用中,如果方法要求有返回值,那在return JSON字符串时,JSON串会被加上XML外壳,所以在接收端接收时,要先去掉XML外壳,代码如下


            string url = http://123/pppp/list.asmx/getcs;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            string result = "";
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8))
                {
                    result = sr.ReadToEnd(); // 这里就是接口输出的内容
                }
            }


     // 转成DataTable
      DataTable dtTotal = JsonToDataTable(result);


      public DataTable JsonToDataTable(string json)
        {
            // ======================
            // 关键修复:提取纯JSON
            // ======================
            int start = json.IndexOf("[");
            int end = json.LastIndexOf("]");
            if (start >= 0 && end > start)
            {
                json = json.Substring(start, end - start + 1);
            }


            JavaScriptSerializer serializer = new JavaScriptSerializer();
            object[] objArray = null;


            try
            {
                objArray = serializer.Deserialize<object[]>(json);
            }
            catch
            {
                return new DataTable();
            }


            DataTable dt = new DataTable();
            if (objArray == null || objArray.Length == 0)
                return dt;


            var firstRow = (System.Collections.Generic.Dictionary<string, object>)objArray[0];
            foreach (var key in firstRow.Keys)
            {
                dt.Columns.Add(key, typeof(string));
            }


            foreach (var item in objArray)
            {
                var rowDict = (System.Collections.Generic.Dictionary<string, object>)item;
                DataRow row = dt.NewRow();
                foreach (var key in rowDict.Keys)
                {
                    if (rowDict[key] == null)
                        row[key] = "";
                    else
                        row[key] = rowDict[key].ToString();
                }
                dt.Rows.Add(row);
            }
            return dt;
        }


如果方法中不要求有返回值,可以使用下面方式输出纯JSON字符串
    Context.Response.Charset = "UTF-8";
    Context.Response.Write(serJson); //只输出Json字符串,不带文件头

作者:站长 来源:原创
相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 陈工笔记(www.dui580.com) © 2026 版权所有 All Rights Reserved.
  • 站长:陈工 微信号:chengongbiji QQ:24498854
  • Powered by 陈工