我的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
的扩展名时,它会发现它很好。有没有办法可以使用普通或不延长?我想知道这是否是一个配置问题。
问题:
我在提取此文件并使用StreamReader
获取导致我获取所有垃圾数据的字符串时出错了吗?
我是否需要执行某些特定操作才能使用WebClient
来抓取包含.json
等不同扩展名的文件,甚至根本不使用扩展程序?
答案 0 :(得分:3)
1 - 该数据流肯定是ZIP(PK
是旧的PKZip标记,并且其索引中也提到了test.json文件名)。
您的服务器可能被设置为提供压缩的所有文件(或者您可能只是访问实际的zip文件)。请检查服务器设置。
2 - 至于第二个问题,WebClient并不关心文件类型。它只是一个数据流,需要通过知道数据是什么的东西来解释(即你的代码)。
只有服务器可以配置为以不同方式提供不同的文件。
答案 1 :(得分:0)
我能够通过我的域名提供商解决问题,似乎已经出现了一些配置问题。