0

サーバーからJSONを逆シリアル化しようとしていますが、特定のキー/値が省略されることがあり、使用できませんでした:

var obj = JsonConvert.Deserialize<Obj>(respString);

私は JSON.net のドキュメントを読み、次のような Linq から JSON へのデシリアライゼーションを進めました。

string respString = await resp.Content.ReadAsStringAsync();
JObject json = JObject.Parse(respString);

...

CustomObject.child.primary_key = int.Parse(obj[i]["primary_key"].ToString());
CustomObject.foreign_key = obj[i]["foreign_key"].ToString();
CustomObject.properties = int.Parse(ojb[i]["properties"].ToString());

try //this is being done a few times throughout the loop
{
    CustomObject.unreliableProperty = obj[i]["xxx"].ToString();
}
Catch { }

すべて正常に動作しますが、時々取得しますoutofmemoryexceptions(サーバーからの JSON は非常に大きいです)。JsonConverterJSON.net からカスタムを実装しようとしましたが、ネストされた階層 (3 レベルの深さ) では、JsonConverterメンテナンスは言うまでもなく、複雑すぎて理解しにくくなります。

メモリ プロファイラーを実行すると、アプリケーションで OOM 例外が発生する原因となる 150 MB を超えるピークが見られました。ヒープ セクションの下で、メモリ割り当ての 30 ~ 40% がmscorlib文字列割り当てのために行われていることがわかりました。もう 1 つの問題はループ中に発生し、GC が連続して発生していました。私は今書かれている方法に完全にうんざりしていますが、私は機知に富んでいます. 誰か助けてもらえますか?

4

0 に答える 0