微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将对象转换为C#中的字节数组,通过套接字发送,然后转换回对象

所以我有一个服务器和一个客户端,可以回传各种数据.最初我有一个复杂的方法,它通过字节数组并将其所有变量和字符串逐个转换为它们应该是什么.我了解到我可以将所有变量放入一个对象中并使用它将其转换为字节数组
private static byte[] ObjectToByteArray2(Object obj)
    {
        if (obj == null)
            return null;
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream();
        bf.Serialize(ms,obj);
        return ms.ToArray();
    }

并使用转换回来

private static Object ByteArrayToObject(byte[] arrBytes)
    {
        MemoryStream memStream = new MemoryStream();
        BinaryFormatter binForm = new BinaryFormatter();
        memStream.Write(arrBytes,arrBytes.Length);
        memStream.Seek(0,SeekOrigin.Begin);
        Object obj = (Object)binForm.Deserialize(memStream);
        return obj;
    }

问题是,一旦我通过网络将此字节数组发送到另一个应用程序,我不能只使用此方法将其转换回来,我得到错误“无法找到程序集’test1s,Version = 1.0.0.0,Culture =中性,PublicKeyToken = null’.“ test1s只是我用它做的小服务器程序的名称.显然,应用程序需要一些额外的信息来将这个数组转换回一个对象,所以我有什么方法可以做到这一点,或者我是否错了?

我想在这里完成的是除了几个变量和字符串之外的任何对象,将其转换为字节数组,将其发送到另一个应用程序,并将其转换回对象.这样我就不必使用字节数组来提取所有变量和字符串.

谢谢

解决方法

有许多预先推出的序列化库可以在这里提供帮助. BinaryFormatter在这里有一些(IMO)不受欢迎的特性 – 特别是它只能在两端使用完全相同(好,几乎)的dll.

XmlSerializer,DataContractSerializer和JavaScriptSerializer是很好的基于文本的实现,并且可以在两端兼容的合同(相同的属性等 – 不一定是相同的类型/版本)下正常工作.

如果您有中等带宽需求,或者需要更好的cpu性能,我建议使用protobuf-net(警告:我写了),这是一个可能有用的快速二进制序列化器.

原文地址:https://www.jb51.cc/csharp/95891.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐