从WCF服务返回的字符串加载XML失败

时间:2016-02-02 21:12:26

标签: c# xml wcf dataset

我有一个WCF项目,它以XML格式返回一个DataSet。这是我的服务合同:

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "RunSavedReportByID", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    DataSet RunSavedReportByID(int savedReportID);

我有另一个使用此服务的项目,我正在尝试恢复DataSet。我这样称呼我的服务:

strResults = objUtility.GetData("RunSavedReportByID", JsonConvert.SerializeObject(new { savedReportID = savedReportID }));

GetData看起来像这样:

public string GetData(string method, string data)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(externalServiceUrl + method);
            ASCIIEncoding encoding = new ASCIIEncoding();
            var postData = encoding.GetBytes(data);

            request.KeepAlive = false;
            request.ProtocolVersion = HttpVersion.Version10;

            request.Method = "POST";
            request.ContentType = "application/json";
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(postData, 0, data.Length);
            }
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                using (var responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                    {
                        using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
                        {
                            return reader.ReadToEnd().Trim();
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }
        return null;
    }

我得到的字符串很奇怪。当我将其保存到文本文件时,它看起来像这样:

"\"<DataSet><xs:schema id=\\\"NewDataSet\\\" xmlns:xs=\\\"http:\\/\\/www.w3.org\\/2001\\/XMLSchema\\\" xmlns:msdata=\\\"urn:schemas-microsoft-com:xml-msdata\\\"><xs:element name=\\\"NewDataSet\\\" msdata:IsDataSet=\\\"true\\\" msdata:UseCurrentLocale=\\\"true\\\"><xs:complexType><xs:choice minOccurs=\\\"0\\\" maxOccurs=\\\"unbounded\\\"><xs:element name=\\\"Table\\\"><xs:complexType><xs:sequence><xs:element name=\\\"InvoiceNo\\\" type=\\\"xs:long\\\" minOccurs=\\\"0\\\"\\/><xs:element name=\\\"GuestID\\\" type=\\\"xs:long\\\" minOccurs=\\\"0\\\"\\/><xs:element name=\\\"ConsumerID\\\" type=\\\"xs:long\\\" minOccurs=\\\"0\\\"\\/><xs:element name=\\\"ContactTitleName\\\" type=\\\"xs:string\\\" minOccurs=\\\"0\\\"\\/><xs:element name=\\\"LastName\\\" type=\\\"xs:string\\\" minOccurs=\\\"0\\\"\\/><xs:element name=\\\"FirstName\\\" type=\\\"xs:string\\\" ... blah blah blah ... \\/NewDataSet><\\/diffgr:diffgram><\\/DataSet>\""

毫不奇怪,在我创建和XmlDocument并调用LoadXml之后,我得到了

  

根级别的数据无效。第1行,第1位。

如果我删除第一个和最后一个引号并且像这样取消字符串

strResults = Regex.Unescape(strResults);
            strResults = strResults.Remove(0, 1);
            strResults = strResults.Remove(strResults.Length - 1, 1);

然后XML加载正常,因此XML本身是合法的。

所有这些论述之后,我的问题是

1)为什么我回来的字符串看起来很奇怪?所有额外的引号和反斜杠有什么用?

2)在加载XML之前是否有更好的方法来摆脱坏东西?

0 个答案:

没有答案