Sockets 在unity3d中序列化和反序列化

Sockets 在unity3d中序列化和反序列化,sockets,unity3d,Sockets,Unity3d,在开发unity3D小型应用程序的过程中,我遇到了一个问题。我使用套接字将数据从服务器发送到客户端。客户机和服务器都有一个相同的类,所以服务器中的数据在客户机中序列化、发送,然后反序列化(发送数据大约为1MB,它由文件组成)。当我使用c#console应用程序项目时,unity3d工作正常,从服务器获取数据不会延迟。但在unity3d中,情况并非如此。问题是在反序列化对象时。(每10次尝试一次就可以了)。有人能解释什么事吗?(如果有帮助的话,我可以显示我的代码)有些代码会很好,错误消息会更好 您

在开发unity3D小型应用程序的过程中,我遇到了一个问题。我使用套接字将数据从服务器发送到客户端。客户机和服务器都有一个相同的类,所以服务器中的数据在客户机中序列化、发送,然后反序列化(发送数据大约为1MB,它由文件组成)。当我使用c#console应用程序项目时,unity3d工作正常,从服务器获取数据不会延迟。但在unity3d中,情况并非如此。问题是在反序列化对象时。(每10次尝试一次就可以了)。有人能解释什么事吗?(如果有帮助的话,我可以显示我的代码)

有些代码会很好,错误消息会更好

您的C#console应用程序项目是使用与unity捆绑的mono构建的吗?如果不是,请知道unity的.NET实现与Microsoft的.NET和现代Mono都相去甚远

除此之外,序列化在Unity中是一个非常令人恼火的话题,因为它碰巧会引发很多问题:

  • 首先,对序列化进行了裁剪,有些东西在运行时不存在。这是Unity团队的设计选择
  • 其次,要实现良好的自定义序列化,您需要反射,反射也不是完全可用的。特别是在iOS和webplayer中,你没有标准,但它相当于
  • 第三,unity编译的每个平台在JIT/AOT中的泛型实现上都有所不同,并详细说明了反射在运行时是如何工作的,所以要做好准备,在任何地方都要格外小心地测试一切
仔细看,它在统一中是很有用的。远非完美,但大多数东西在经过一些黑客攻击后都能正常工作。如果您愿意的话,这种黑客行为已经在一个20美元的资产商店软件包中进行了(远不是完美的,但在简单的用例中就足够了——有一天必须推送我的补丁)

我阅读了您的评论“至于JSON.NET,我认为它在我的情况下不会有用,因为套接字服务器只发送字节(或字符串)”

您可以将JSON序列化为字符串。然后像这样咬你一口:

byte[] jsonData = Encoding.ASCII.GetBytes (yourJsonGoesHere)

您的字符串JSON字节已准备好从服务器发送或发送到服务器。其次,如果您正在使用binaryformatter,请尝试阅读文档中的binaryformatter.binder。

首先感谢您的回复。所以,反序列化时的错误消息是“SerializationException:意外的二进制元素:0”。首先感谢您的回复。所以,脱盐时的错误消息是“SerializationException:意外的二进制元素:0”。我的C#应用程序是独立的,没有与unity的链接,它直接连接到socket服务器。至于JSON.NET,我认为它在我的情况下不会有用,因为套接字服务器只发送字节(或字符串)