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余分なデータがすべて含まれるため、そのまま逆シリアル化することはできません。

もう1つの注意点:URIはを指しますがsomeJsonFile.zip、実際にはzip.jsonされていません。ファイルにのような拡張子を付けるか、拡張子を付けないと、ファイルが見つからないというエラーが表示されますが、のような拡張子を付けると.zip、うまくいきます。通常の拡張機能を使用する方法はありますか、または拡張機能を使用しない方法はありますか?これは構成の問題かどうか疑問に思いました。

質問:

  1. このファイルをプルしてStreamReader、ゴミ箱のデータをすべて取得する原因となっている文字列を取得するために使用して、何か間違ったことをしていますか?

  2. のように、または拡張子がまったくないなど、WebClientさまざまな拡張子を持つファイルを取得するために使用できるようにするために、特定のことを行う必要がありますか?.json

4

2 に答える 2

3

1-そのデータストリームは確かにZIPPKです(古いPKZipマーカーであり、test.jsonファイル名もそのインデックスに記載されています)。

サーバーは、圧縮されたすべてのファイルを提供するように設定されている場合があります(または、実際のzipファイルにアクセスしている場合もあります)。サーバーの設定を確認してください。

2- 2番目の質問に関しては、WebClientはファイルタイプを気にしません。これは、データが何であるか(つまりコード)を知っている何かによって解釈される必要があるデータのストリームにすぎません。

さまざまな方法でさまざまなファイルを提供するように構成できるのはサーバーだけです。

于 2011-07-20T22:10:50.533 に答える
0

私は自分のドメインプロバイダーで物事を理解することができました、彼らの側でいくつかの構成の問題があったようです。

于 2011-07-21T16:44:28.053 に答える