2012-04-24 54 views
0

我想在C#中的byte []數組中反序列化字節流。 byte []數組長度爲8196字節,並從TCP/IP連接獲取其信息。C#DataContractJsonSerializer中的空字符序列化異常

當我將該數組賦予System.Runtime.Serialization.Json.DataContractJsonSerializer的ReadObject方法時,它將引發SerializationException,並顯示消息「Encountered unexpected character'\ 0'」。

我該如何解決這個問題?

+0

該問題沒有解決,但我已經通過創建一個與接收數據的大小完全匹配的byte []數組來解決問題。 – 2012-04-24 11:20:35

回答

0

你如何閱讀字符串?通常,'\ 0'錯誤指向編碼問題。字節流可以使用特定類型的編碼,您可以強制自己的編碼 - 也可以反序列化,以使特定的編碼與流的實際編碼不一致。

http://social.msdn.microsoft.com/Forums/en/wcf/thread/b80c9aa7-a3d1-4aa0-b61a-35363cbc177e描述了一種情況,其中替換下面的代碼行的:

s = ASCIIEncoding.Default.GetString(ms.GetBuffer()); 

與:

 ms.Seek(0, SeekOrigin.Begin); 
     StreamReader sr = new StreamReader(ms); 
     s = sr.ReadToEnd(); 

固定的問題。也許類似的情況也適用於你的情況?

+0

我從一個來自TCP/IP連接的流創建自己的字節數組。當我遇到一個結束協議部分的字節時,我自己插入一個\ 0字符。我來自C背景,所以我沒有意識到C#字符串可以有\ 0字符。 – 2012-04-28 10:13:14