奇妙な問題があります。そのため、アプリでデータを返す Web サービスに対していくつかの呼び出しを行っています。ただし、私はトークンベースのログインシステムを使用しているため、ユーザーが初めてアプリに入ると、Web サービスからトークンを取得してその特定のユーザーにログインし、そのトークンはそのユーザーの詳細のみを返します。
私が抱えている問題は、新しいユーザーの詳細を取得するために再度呼び出しを行う必要があるユーザーの変更時ですが、ビジュアルスタジオのブレークポイントデバッグを使用すると、新しいユーザーのトークンが呼び出しを行っていることが示されますが、問題はjsonが取得されている場合です逆シリアル化されていても、古いデータを読み取って逆シリアル化しているようです。新しいユーザーでアプリを終了すると、正常に動作するため、キャッシュされた値を読み取っているように見えますが、クリアする方法がわかりませんか? 新しい呼び出しが行われており、問題は逆シリアル化にあると確信していますが、再度逆シリアル化する前に値をクリアしようとしましたが、何も機能しません。json デシリアライザーで何か不足していますか?キャッシュされた値をクリアするにはどうすればよいですか?
ここで呼び出しを行い、キャッシュしないように設定して、毎回新しい呼び出しを行います。
client.Headers[HttpRequestHeader.CacheControl] = "no-cache";
var token_details = await client.DownloadStringTaskAsync(uri);
ここで結果を逆シリアル化します。このセクションで古いデータが表示されるため、「token_details」内に表示される生のjsonは正しいですが、token_detailsを逆シリアル化すると、間違ったデータが表示されます。
deserialized = JsonConvert.DeserializeObject(token_details);
私が逆シリアル化しているクラスは単純なクラスであり、ここでは特別なことは何も起きていません。呼び出されるたびに値をクリアするようにコンストラクターを作成しようとさえしました。
public class test
{
public string status { get; set; }
public string name{ get; set; }
public string birthday{ get; set; }
public string errorDes{ get; set; }
public test()
{
status = "";
name= "";
birthday= "";
errorDes= "";
}
}
呼び出しを行う前の uri:
{ https://whatever.co.za/token/?code=BEBCg==&id=WP7&junk=121edcd5-ad4d-4185-bef0-22a4d27f2d0c } - 古い呼び出し
"UBCg==" - 古い返信
{ https://whatever.co.za/token/?code=ABCg==&id=WP7&junk=56cc2285-a5b8-401e-be21-fec8259de6dd } - 新しい呼び出し
"UBCg==" - 古い呼び出しと同じ応答である新しい応答
ご覧のとおり、呼び出しを行うたびに新しい GUID をアタッチしましたが、downloadstringtaskasync メソッド呼び出しを行う前に新しい uri が読み取られますが、古いデータが返されます。
- "&junk=" + Guid.NewGuid());