2010-07-22 102 views
3

我通過NetWorkStream將序列化對象發送到另一臺計算機,在接收端我想反序列化這些對象。使用JSON.Net從NetworkStream反序列化或解析JSON

當我通過NetworkStream接收數據時,我將發送很多連續的對象,我怎麼知道第一個JSON文檔何時結束以便讓JSON.NET從接收的字符串中解析文檔?

或者更好的是,有沒有什麼辦法讓Json.NET直接從NetworkStream中讀取和反序列化/解析生成的JSON文檔?

讓我知道 問候

阿爾伯特

回答

3

如果你實現一些自定義的協議,你可以發送一個標記,以表明當前對象端,使客戶端可以反序列化,並把它添加到一個結果列表。另一種選擇是讀取整個流並一次反序列化整個數組,這當然會消耗更多的內存。

+0

我的意思是不發送任何特殊的標記,只是JSON對象。 – aattia 2010-07-22 21:23:45

+1

JSON反序列化器需要整個JSON字符串才能成功執行反序列化,所以如果您想實現這一點,您需要一個標記或等待整個流被讀取。你可以嘗試實現一些啓發式算法,例如計算開頭數'{'並匹配相應的結束'}以確定當前對象結束的位置,但這對於任何JSON字符串可能不是一件容易的任務。 – 2010-07-22 21:40:43

+0

從TextStream中讀取時,JSON.NET需要做類似的工作,如果我從TextStream中解析出JSON文檔,當文檔結束時沒有標記告訴JSON.NET。 因此,就像JSON.NET解析文本流中的文檔,是否有一種方法可以爲網絡流執行相同的操作,因爲兩者都是流? – aattia 2010-07-22 22:06:20