C# C DataContractJsonSerializer中空字符的序列化异常
我想反序列化C中byte[]数组中的字节流。byte[]数组的长度为8196字节,并从TCP/IP连接获取其信息 当我将该数组赋给System.Runtime.Serialization.Json.DataContractJsonSerializer的ReadObject方法时,它会抛出一个SerializationException,消息为遇到意外字符“\0”C# C DataContractJsonSerializer中空字符的序列化异常,c#,.net,json,C#,.net,Json,我想反序列化C中byte[]数组中的字节流。byte[]数组的长度为8196字节,并从TCP/IP连接获取其信息 当我将该数组赋给System.Runtime.Serialization.Json.DataContractJsonSerializer的ReadObject方法时,它会抛出一个SerializationException,消息为遇到意外字符“\0” 我如何修复此问题?您如何读取字符串?通常,“\0”错误指向编码问题。字节流可以使用特定类型的编码,您可以强制自己进行编码,也可以采用与
我如何修复此问题?您如何读取字符串?通常,“\0”错误指向编码问题。字节流可以使用特定类型的编码,您可以强制自己进行编码,也可以采用与流的实际编码不一致的特定编码进行反序列化 描述替换以下代码行的情况:
s = ASCIIEncoding.Default.GetString(ms.GetBuffer());
与:
解决了这个问题。也许类似的情况也适用于您的情况?问题没有解决,但我已经通过创建一个与接收数据大小完全匹配的字节[]数组来解决问题。我自己从TCP/IP连接的流中创建字节数组。当我遇到一个以我的协议部分结尾的字节时,我会自己插入一个\0字符。我来自C语言背景,所以我没有意识到C字符串中可以包含\0个字符。
ms.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms);
s = sr.ReadToEnd();