WebClient.OpenReadAsync()破坏了JSON数据。为什么?

时间:2011-07-20 21:55:08

标签: c# silverlight webclient corrupt-data

我的Silverlight应用程序中有一个类(de-)将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等不同扩展名的文件,甚至根本不使用扩展程序?

    < / LI>

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

我能够通过我的域名提供商解决问题,似乎已经出现了一些配置问题。