これは私の質問HTTPClient Buffer Exceeded 2G; Cannot write more bytes to the bufferに関連していますが、IMOが別の質問をするのに十分です。NewtonSoft Json無効なキャスト例外
もう1つの質問では、2Gリクエストバッファを破る方法を理解しようとしています。アイデアはストリーミングを使用することでしたが、逆シリアル化する必要があります。教授のGoogleと話す際に、私はTextReaderを使用してストリーム/デシリアライズする必要があることを発見しました。そのための私のコードは:
public async Task<API_Json_Special_Feeds.RootObject> walMart_Special_Feed_Lookup(string url)
{
special_Feed_Lookup_Working = true;
HttpClientHandler handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
using (HttpClient http = new HttpClient(handler))
{
http.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip"));
http.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
url = String.Format(url);
using (var response = await http.GetAsync(url, HttpCompletionOption.ResponseHeadersRead))
{
Console.WriteLine(response);
var serializer = new JsonSerializer();
using (StreamReader sr = new StreamReader(await response.Content.ReadAsStreamAsync()))
{
using (var jsonTextReader = new JsonTextReader(sr))
{
API_Json_Special_Feeds.RootObject root = (API_Json_Special_Feeds.RootObject)serializer.Deserialize(jsonTextReader);
return root;
}
}
}
}
}
ここでわかるように、戻り値の型は強く型付けされています。メソッドの戻り値の型は一致します。今、私は、呼び出し元の行に移動:
API_Json_Special_Feeds.RootObject Items = await net.walMart_Special_Feed_Lookup(specialFeedsURLs[i].Replace("{apiKey}", Properties.Resources.API_Key_Walmart));
だから、私たちは一致しているタイプは、周りのすべての方法をAPI_Json_Special_Feeds.RootMethod。
望ましくない結果:
実行は、呼び出し側のラインは、InvalidCastExceptionがスローされます
Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'RootObject'
私が復帰する前に、メソッドの最後にチェックしました、その結果が実際から鋳造されます返される前にAPI_Json_Special_Feeds.RootMethodのオブジェクト。
質問:はどこかreturn文と呼び出し元のラインとの間に、返されるオブジェクトはNewtonsoft.Json.Linq.JObjectにAPI_Json_Special_Feeds.RootMethodから変換されています。私はそれの間にコードがないので、私はそれをデバッグすることはできません。私がコールラインで再びキャストすると、「キャストできません」というエラーが表示されます。このオブジェクトタイプの劣化/変更を防止するにはどうすればよいですか?
多くの人があなたの時間、配慮、そしてあなたが提供できる考えや提案について考えています!あなたは、一般的な過負荷BinaryFormatter
によって生成されたファイルとは異なりJsonSerializer.Deserialize<T>()
var root = serializer.Deserialize<API_Json_Special_Feeds.RootObject>(jsonTextReader);
を使用する必要が
ありがとうございました!これまでのところ、それは機能しません。私はそれがどこに詰まっているかを把握しようとしていて、報告するでしょう。エラーなし - 応答をロードし、何も返さない –