0

関連する(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を参照できないことでした。errorcode

4

1 に答える 1

2

これらの文字は、デバッグ中にのみ表示されます。目的は、文字列全体をコピーして C# コードに直接挿入し、さらにテストできるようにすることだと思います。また、文字列全体を 1 行で表現できるようにすることです。

ただし、コード内の文字列にアクセスすると、すべての\n's が実際の改行に変換されます。したがって、安全に解析できます。

PS なぜ手動で Web リクエストを呼び出すのですか? ソリューション ツリーで [Web 参照の追加] 機能を使用すると、Visual Studio によってスタブ コードが生成されます。その後、XML を気にする必要はありません。Visual Studio が WSDL 記述に基づいて生成するオブジェクトを操作します。

于 2012-04-16T14:12:21.133 に答える