我有一個大 JSON對象,我需要從MVC ApiController返回。從ApiController返回JSON流
我不能簡單地返回JSON對象作爲序列化內容上的內部串行器barfs過長。
我不想序列化爲字符串,然後返回字符串,因爲我們可能會處理5-6MB的數據,這似乎是無用的內存浪費。
我想要做的就是使用Newtonsoft JSON串行器直接寫入響應流。
Dim Ret = Client.Search(Model) ''Get the results object
Dim Response As New HttpResponseMessage()
Using MemoryStream As New IO.MemoryStream
Using StreamWriter As New StreamWriter(MemoryStream)
Using JsonWriter As JsonWriter = New JsonTextWriter(StreamWriter)
Dim Serializer As New JsonSerializer
Serializer.Serialize(JsonWriter, Ret)
End Using
End Using
Response.Content = New StreamContent(MemoryStream)
Return Response
End Using
不幸的是,這會導致連接被意外重置 - 我猜,然後再將其發送完的結果,這是由於流佈置的?
即使我去掉所有的Using
塊和剛剛離開一切爲了GC如下:
Dim Ret = Client.Search(Model)
Dim Response As New HttpResponseMessage()
Dim MemoryStream As New IO.MemoryStream
Dim StreamWriter As New StreamWriter(MemoryStream)
Dim JsonWriter As JsonWriter = New JsonTextWriter(StreamWriter)
Dim Serializer As New JsonSerializer
Serializer.Serialize(JsonWriter, Ret)
Response.Content = New StreamContent(MemoryStream)
Return Response
我得到一個0字節的響應來代替。有人可以請指點我正確的方向嗎?
這是太快是一個超時(亞秒)感謝tracingf的建議,但我會看看。 – Basic