这是相关的(C#.NET)代码:
WebRequest webRequest = System.Net.WebRequest.Create(authenticationUrl);
UTF8Encoding encoding = new UTF8Encoding();
...
var webResponse = webRequest.GetResponse();
var webResponseLength = webResponse.ContentLength;
byte[] responseBytes = new byte[webResponseLength];
webResponse.GetResponseStream().Read(responseBytes, 0, (int)webResponseLength);
var responseText = encoding.GetString(responseBytes);
webResponse.Close();
以下是responseText
的值(在调试上述代码时从Visual Studio中复制):
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<responseblock version=\"3.67\">\n <requestreference>X3909254</requestreference>\n <response type=\"ERROR\">\n <timestamp>2012-04-16 13:53:59</timestamp>\n <error>\n <message>Invalid field</message>\n <code>30000</code>\n <data>baseamount</data>\n </error>\n </response>\n</responseblock>\n"
为什么响应中似乎有转义字符(例如\"
)?这是由于我将响应流转换为字符串的方式吗?我应该做什么(以便存储在变量responseText
中的值可以解析为'标准'XML)?
更新 - 我正在使用的更多代码:
var resultXML = XElement.Parse(responseText);
...
int errorCode = (int)(resultXML.Element("error").Element("code"));
问题是元素error
不是resultXML
的根元素的直接子元素,因此我显然无法引用error
(或其子元素{{1 }})。
答案 0 :(得分:2)
只有在调试时才能看到这些字符。我想目的是你可以复制整个字符串并将其直接插入到C#代码中以进行进一步测试。此外,它能够将整个字符串表示为一行。
但是当您访问代码中的字符串时,所有\n
都将转换为实际换行符。所以你可以安全地解析它。
P.S。为什么要手动调用Web请求?如果您使用&#34;添加Web引用&#34; Visual Studio将为您生成存根代码。解决方案树中的功能。然后你不必关心XML - 你将使用Visual Studio基于WSDL描述生成的对象。