私は現在、概念実証に取り組んでおり、JSONを使用してHttpRequestをシリアライズする際の問題に直面していました。JSONを使用してリクエストオブジェクトをシリアライズ
背景私はもともと下図のように、私は簡単にJSON.Encode()メソッドを使用して、それを達成することができるだろうと思った
:
JSON.Encode(HttpContext.Request)
しかし、私はすぐに、これは円形のすべての種類の原因となることがわかりましたスローされる参照(は、主に、Requestオブジェクトの実際の構造と複雑さに起因する)。
JSON.Encode(new {HttpContext.Request.Cookies,HttpContext.Request.Headers, ... });
だけで正常に動作:実際に私は以前、私は必要なだけの特定の要素をつかむために、次のコードを使用してきたように、循環参照が含まれていないプロパティに遭遇したとき、これらにのみ発生します。
これを処理するには、より良い方法があるかどうか不思議です(またはそれを処理する最良の方法はです)。私が間違っていた可能性のある領域を見つけるために、これまでに取ってきたアプローチのいくつかについて詳しく説明します。前
は リクエスト内の各プロパティを反復処理するためにリフレクションを使用し、JSONストリング 「プロパティ・バイ・プロパティ」を構築しようと
近づきます。 (円形 参照に遭遇すると、この失敗)
Dictionaryオブジェクト内の各プロパティを保存しようとし、それが出てオブジェクトを「平ら」であろうと期待して全体辞書(をシリアル化するJSONを使用してそしてそれが簡単JSON.NET libraryを使用して、私は循環参照を避けるために、いくつかの追加設定で合格しようとしたJsonConvert.SerializeObject()メソッド(を通してそれをシリアライズしようとしている)
をシリアル化するために行うことはなく、持っています運があった)
私の最新のアプローチ(JSON.NETライブラリを使用して)私は、しかし、私がリクエスト内のストリームオブジェクトの「タイムアウト」プロパティを関与エラーが発生しました、作業に近い来るだろうと思いました。
私は、単にストリームオブジェクトと循環参照のシリアル化を避けることに反対していません。私は、これらの事故のいずれかを回避しながら、できるだけ多くのRequestオブジェクトを取得しようとしています。
マルコムの提案に感謝します。私はあなたの提案を読んでいくつかの設定を適用してからいくつかの方法を使ってみましたが、まだストリーム(ストリームに関係していますか?)の問題が発生しています。何か案は? –
これは、あなたがJSONできないと思うのです。ストリームプロパティを持つオブジェクトを変換します。 –
私はその方法にも傾き始めています。それは、ストリームをシリアライズするときにタイムアウトを引き起こしたように見え、それは前述の答えを出力します。 Streams/Circular Referencesを無視する方法を見つけなければならないと思います。 –