VB.NETコードのカスタムオブジェクトをAngularJS HTTP Postに返すようにしています。ユーザーの要求に基づいて、このオブジェクトは非常に大きくなる可能性があります。非常に、非常に大きい。それが起こったときはいつでも、シリアル化しようとするとOutOfMemoryExceptionが発生します。したがって、私は今にStringWriterを使用して、それをserialzeするNewtonsoftからJSON.NETパッケージを使用しています:
Using sw As New StringWriter()
Using writer As JsonWriter = New JsonTextWriter(sw)
Dim serializer As New JsonSerializer()
serializer.Serialize(writer, periodData)
writer.Flush()
End Using
End Using
これは動作しますが、私はその後、私はまだそのOutOfMemoryException例外を取得sw.ToString
をしようとするとき。
私はインターネットを徘徊し、HttpResponseオブジェクトに送信されたStreamWriterを使用して、応答をフラッシュしてWebクライアント呼び出しに戻すことができると信じています。しかし、私はこれを行う方法を理解することはできません。
助けが必要ですか?あるいは、私が道を離れる場合、私にこれを行うためのよりよい方法を教えてください。
アップデート1
どうやら私はエラー「オペランドを使用するとsystem.idisposableを実装しなければなりません」を取得するので、私が使用して文の中でのHttpResponseを使用することはできません。だから、WebMethodでHttpResponseオブジェクトを作成するのに問題があります。 TextWriterとHttpWriterの両方をコンストラクタのparamsとして渡すとエラーが出ます。
アップデート2
わかりましたので、オブジェクトをシリアル化しようとしたとき、私はもはやOutOfMemoryException例外を取得しています。しかし、私はStreamWriterがHttpResponseオブジェクトに書き込むように見えないので、何か間違っていると思います。これは私の現在のコードです:私はクロームデベロッパーコンソールで私JavaScriptを一時停止したときに
Dim response As HttpResponse = HttpContext.Current.Response()
response.ContentType = "application/json"
response.Clear()
response.BufferOutput = True
Using sw As New StreamWriter(response.OutputStream, System.Text.Encoding.UTF8)
Using writer As JsonWriter = New JsonTextWriter(sw)
Dim serializer As New JsonSerializer()
serializer.Serialize(writer, periodData)
writer.Flush()
End Using
sw.Flush()
End Using
response.Flush()
はその後、応答オブジェクトは、単に空の文字列です。 javascriptは単なる基本的な$ http.post呼び出しです:
$http.post('url.aspx/GetData', angular.toJson({
param1: data1,
param2: data2,
param3: data3
})).then(function (response) {
//Do stuff with response which is currently an empty string.
}
私のVB.NETコードは正しいとは思いません。助けて?
*あなたがHttpResponseオブジェクトに送信されたStreamWriterを使用して、応答をフラッシュしてWebクライアント呼び出し*に戻すことができる*。なぜあなたはそれを試してみませんか?問題が発生した場合は助けてもらえますが、コードを書くことはできません:) – djv