1

HttpWebResponseをXmlDocumentにロードしようとしていますが、「ルートレベルのデータが無効です。行1、位置1」という例外が発生します。コンソールに応答を出力すると、「system.net.connectstream」が表示されます。間違ったパスワードを入力すると、例外が404エラーに変わるため、クレデンシャルは私の問題ではないようです。これが私のコードです...

string username = "username";
string password = "password";
string url = "https://myurl.com";

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Credentials = new NetworkCredential(username, password);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
XmlDocument xmlDoc = new XmlDocument();
Console.WriteLine(response.GetResponseStream());
xmlDoc.Load(response.GetResponseStream());

ありがとう!

4

1 に答える 1

2

呼び出すことはあなたのために多くのことをするつもりはありません-ToStringオーバーライドされません。GetResponseStream()Stream.ToString

デバッグには次のようなものを使用することをお勧めします::

// Prefer casting over "as" unless you're going to check it...
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
    using (Stream stream = response.GetResponseStream())
    {
        // For diagnostics, let's assume UTF-8
        using (StreamReader reader = new StreamReader(stream))
        {
            Console.WriteLine(reader.ReadToEnd());
        }
    }
}

次に、中央のセクション(with StreamReader)XmlDocument.Load呼び出しに置き換えます。

基本的に無効なXMLであることがわかると思いますが、上記は実際のXMLを示しているはずです。

編集:あなたのコメントはデータを次のように示しています:

{"messages":{"message":"1 Device(s) returned."},"devices":{"device":
    {"@id":"00","uuid":"00000000","phonenumber":"000‌​000",
     "user name":"0000","name":"Guy,Somebody","platform":"platform","os":"III",
     "version":"1‌​.1.1"}},"appName":"someApp"}

それがJSONです。XMLではありません。XMLとしてロードしようとしないでください。2つのオプションがあります。

  • サーバーがサポートしている場合は、XML応答が返されるように、要求しているものを変更します
  • XMLではなくJSONとして(たとえばJson.NETを使用して)解析します。
于 2012-08-02T13:27:49.773 に答える