0

我的 Silverlight 应用程序中有一个类,它(反)序列化 JSON 字符串到对象类/从对象类。我WebClient.OpenReadAsync用来获取包含此 JSON 字符串的文件:

{"FirstName":"Bob","LastName":"Underwood"}

然而,在调用OpenReadAsync之后,检索到的字符串有很多额外的字符:

"PK\n\0\0\0\0\0�u�>h��5\0\0\05\0\0\0\t\0\0\0test.json\"{\\\"FirstName\\\":\\\"Gary\\\",\\\"LastName\\\":\\\"MacDonald\\\"}\"PK\0\n\0\0\0\0\0�u�>h��5\0\0\05\0\0\0\t\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0test.jsonPK\0\0\0\0\0\07\0\0\0\\\0\0\0\0\0"

这是我用来下载 JSON 的代码:

WebClient client = new WebClient();
client.OpenReadCompleted += client_OpenReadCompleted;
client.OpenReadAsync(new Uri("/someJsonFile.zip", UriKind.Relative));

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) {
    if (e.Error == null) {
        StreamReader reader = new StreamReader(e.Result);
        string jsonString =  reader.ReadToEnd().ToString();
    }
    else {
        addMessage("Error " + e.Error.ToString());
    }
}

jsonString最终得到所有额外的数据,所以我不能按原样反序列化它。

另一件需要注意的事情:URI 指向someJsonFile.zip,但它实际上没有压缩,当我给文件一个扩展名时.json,或者没有扩展名时,我收到一个错误,它找不到文件,但是当我给它一个扩展名时.zip,它觉得很好。有没有办法可以使用普通或不使用扩展名?我想知道这是否是配置问题。

问题:

  1. StreamReader我在拉取这个文件并用来获取导致我获取所有垃圾数据的字符串时做错了什么吗?

  2. 我是否需要做一些特定的事情才能WebClient用来抓取具有不同扩展名的文件,例如.json,甚至根本没有扩展名?

4

2 回答 2

3

1 - 该数据流肯定是 ZIP(PK是旧的 PKZip 标记,并且在其索引中也提到了 test.json 文件名)。

您的服务器可能设置为提供所有压缩文件(或者您可能只是访问实际的 zip 文件)。请检查服务器设置。

2 - 至于第二个问题,WebClient 不关心文件类型。它只是一个数据流,需要由知道数据是什么的东西(即您的代码)来解释。

只有服务器可以配置为以不同的方式提供不同的文件。

于 2011-07-20T22:10:50.533 回答
0

我能够与我的域提供商一起解决问题,似乎是他们的一些配置问题。

于 2011-07-21T16:44:28.053 回答