WebClient.OpenReadAsync () повреждает данные JSON. Зачем? - PullRequest
0 голосов
/ 21 июля 2011

В моем приложении 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 или вообще никакого расширения?

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

1 - этот поток данных, безусловно, представляет собой ZIP (PK - старый маркер PKZip, и имя файла test.json также упоминается в его индексе).

Возможно, ваш сервер настроен для обслуживания всех сжатых файлов (или вы просто обращаетесь к фактическому zip-файлу). Пожалуйста, проверьте настройки сервера.

2 - Что касается второго вопроса, WebClient не заботится о типах файлов. Это просто поток данных, который должен быть интерпретирован чем-то, что знает, что это за данные (т. Е. Ваш код).

Только сервер может быть настроен на обслуживание разных файлов по-разному.

0 голосов
/ 21 июля 2011

Мне удалось выяснить ситуацию с моим провайдером домена, похоже, возникли некоторые проблемы с настройкой.

...