1

当我尝试反序列化 Web 响应时,我得到一个无效操作异常。

在这个 webresponse 中,我得到一个通过 https 发送的 XML 页面。我的代码所做的基本上是发送一个 web 请求以获取登录 cookie,然后是另一个获取 XML 页面的请求,然后我反序列化该页面。

当我尝试反序列化时出现问题,它给了我以下错误:

There is an error in XML document (1, 1).

首先,我查看了我的网络响应,看看它是否有正确的数据。所以我把我的 webresponse 放到流阅读器中,并使用 readToEnd 将其转换为字符串。像这样:

dim myStringResult as String = myStreamReader.ReadToEnd()

它给了我一些字母数字和块。所以我认为我得到的回应是问题所在。我用 Fiddler 进行了检查,发现在我看到内容之前需要对响应进行解码(是的,它确实有我想要的正确响应)。我对异常进行了更深入的研究,看到它说

hexadecimal value 0x1F, is an invalid character. Line 1, position 1

我尝试查看 System.Text.Encoding,但找不到十六进制的任何内容。谁能帮我这个?

编辑:我可能必须对其进行解码,因为它是一个 https 响应,而不是因为它是十六进制编码的。

edit1:不幸的是,我尝试过HttpUtility.HtmlDecode它没有更改字符串。

edit2:我得到的数据示例

{� �U�r�0��+(g���(J��ԙ$�k;IomR&�I�N?���/�6���L�^`���</p >

它没有正确显示数据。它应该主要是正方形。时不时地看到

编辑:标题

content-disposition: : attachment; filename="document.xml"
CachingModuleShouldWork: true
Content-Language: en-US

Vary: Accept-Encoding,User-Agent

内容长度:382 内容类型:应用程序/xml

4

2 回答 2

2

0x1f 是 Windows 控制字符。它不是有效的 XML。

您需要先使用HttpUtility.Decode之类的东西对其进行解码

因此:获取您的响应并使用 StreamReader 将其读入字符串,然后执行以下操作:

StringWriter myWriter = new StringWriter();
         // Decode the encoded string.
         HttpUtility.HtmlDecode(myEncodedString, myWriter);
于 2012-11-21T09:15:20.803 回答
0

如果您正在解码从网络上读取的内容,我建议您检查一下:

HttpUtility.HtmlDecode 方法(字符串)

编辑:类似的问题

十六进制值 0x1F,是无效字符。第 1 行,位置 1

于 2012-11-21T09:11:55.810 回答