C#中Socket通讯时接收到数据后通过Json反序列化时出现异常:“0x00 is invalid after a single JSON value. Expected...“

本文讲述了在使用Socket通信时,如何将List数据序列化为string并通过Socket发送,以及接收端如何处理接收到的包含多余0x00空白字符导致反序列化异常的问题。作者提出通过TrimEnd方法移除尾部0x00以解决该问题。
摘要由CSDN通过智能技术生成

1. 问题描述

(1)Send时将List<PlatenInfo>数据通过Json序列化成string类型,并通过Socket发送。
string recipeInfo = JsonSerializer.Serialize<List<PlatenInfo>>(wafer.RecipeInfo);
var recipeData = Encoding.UTF8.GetBytes(recipeInfo);
_acceptSocket.Send(recipeData);
(2)接收端Receive数据后,通过Json反序列化成List<PlatenInfo>数据。
try
{
    byte[] buffer = new byte[1024];     //Receive数据时要先指定读取字节长度
    _tcpClient.Receive(buffer);
    string msg = Encoding.UTF8.GetString(buffer);
    List<PlatenInfo>? list = JsonSerializer.Deserialize<List<PlatenInfo>>(msg);
}
catch (Exception ex)
{
    Log(ex.Message);
}
在反序列化的时候发生异常:

2. 问题分析

Socket将接收到的数据放到设定了1024字节大小的buffer中,buffer前有部分是有效的信息,后半段是空白\0符号。只有前半部分才可以反序列化成想要的结果,而整个操作的话就异常了。

3. 问题解决:

可以去除尾部0x00空白区域。

如果像上述字符编码的,则可以在接收到data并转换为string后,再直接加上:

msg = msg.TrimEnd('\0');        //将最后的0x00空白区域去掉

便可以反序列化成功。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值