Webservice返回json資料格式不帶xml頭部
阿新 • • 發佈:2019-02-15
我將結果內容用字串拼接成Json資料並返回的時候,會在結果前面新增xml頭部,結果如下。
- <span ><string xmlns="http://tempuri.org/">
- {"data":[{"batchId":"B001","produceOrderId":"", "produceFactory":"","addTime":"2014/7/8 15:09:00","remark":"","parentId":""},{"batchId":"B002","produceOrderId":"生產訂單2", "produceFactory":"測試公司1","addTime":"2014/7/8 8:00:00","remark":"","parentId":"B001"},{"batchId":"B003","produceOrderId":"生產訂單3", "produceFactory":"測試公司2","addTime":"2014/7/8 0:00:00","remark":"","parentId":"B001"},{"batchId":"B004","produceOrderId":"生產訂單4", "produceFactory":"測試公司3","addTime":"2014/7/8 0:00:00","remark":"","parentId":"B002"},{"batchId":"B005","produceOrderId":"生產訂單5", "produceFactory":"測試公司4","addTime":"2014/7/8 0:00:00","remark":"","parentId":"B004"},{"batchId":"B006","produceOrderId":"生產訂單6", "produceFactory":"外包公司1","addTime":"2014/7/8 0:00:00","remark":"","parentId":"B005"}]}
- </string></span>
產生如上資料的Webservice介面程式碼如下。
- <span > [WebMethod]
- public String GetQrCodeList(String qrCode)
- {
- return PriGetQrCodeList(qrCode);
- }
- /// <summary>
- /// 獲取關聯的二維碼樹結構
- /// </summary>
- /// <param name="qrCode">產品二維碼</param>
- /// <returns></returns>
- private String PriGetQrCodeList(String qrCode)
- {
- try
- {
- String sfull = "{{\"data\":[{0}]}}";
- String spart = "{{\"batchId\":\"{0}\",\"produceOrderId\":\"{1}\", \"produceFactory\":\"{2}\",\"addTime\":\"{3}\",\"remark\":\"{4}\",\"parentId\":\"{5}\"}}";
- String sData = "";
- DataTable dt = bll.GetQrCodeList(qrCode);
- if (dt == null || dt.Rows.Count == 0) return "";
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- sData += (String.Format(spart,
- dt.Rows[i]["BatchId"].ToString(),
- dt.Rows[i]["ProduceOrderId"].ToString(),
- dt.Rows[i]["ProduceFactory"].ToString(),
- dt.Rows[i]["AddTime"].ToString(),
- dt.Rows[i]["Remark"].ToString(),
- dt.Rows[i]["ParentId"].ToString()) + ",");
- }
- return String.Format(sfull, sData.TrimEnd(','));
- }
- catch (Exception)
- {
- return "";
- }
- }</span>
解決方案:
改變資料的返回方式,用 Context.Response.Write代替return 語句,修改GetQrCodeList方法如下即可返回正確的Json格式資料。
- <span > [WebMethod]
- public void GetQrCodeList(String qrCode)
- {
- Context.Response.Charset = "GB2312"; //設定字符集型別
- Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
- Context.Response.Write(PriGetQrCodeList(qrCode));
- Context.Response.End();
- }</span>
返回結果如下:
- <span >{"data":[{"batchId":"B001","produceOrderId":"", "produceFactory":"","addTime":"2014/7/8 15:09:00","remark":"","parentId":""},{"batchId":"B002","produceOrderId":"生產訂單2", "produceFactory":"測試公司1","addTime":"2014/7/8 8:00:00","remark":"","parentId":"B001"},{"batchId":"B003","produceOrderId":"生產訂單3", "produceFactory":"測試公司2","addTime":"2014/7/8 0:00:00","remark":"","parentId":"B001"},{"batchId":"B004","produceOrderId":"生產訂單4", "produceFactory":"測試公司3","addTime":"2014/7/8 0:00:00","remark":"","parentId":"B002"},{"batchId":"B005","produceOrderId":"生產訂單5", "produceFactory":"測試公司4","addTime":"2014/7/8 0:00:00","remark":"","parentId":"B004"},{"batchId":"B006","produceOrderId":"生產訂單6", "produceFactory":"外包公司1","addTime":"2014/7/8 0:00:00","remark":"","parentId":"B005"}]}</span>