Unity使用BinaryFormatter通信的相关问题

c#自带的二进制序列化BinaryFormatter,来进行接口通信有一定的优势:

1、不用知道消息的Type就可以反序列化,因为Type就在byte里面(其他的例如json、proto都需要手动解析Type类型)

2、消息的class里面可以写任意的构造函数。(json如果多个构造函数,就需要指定。proto必须要有没有参数的构造函数)

3、接口类型可以用各种数据类型,入Dictionary、HashSet、SortDictionary、SortHashSet、Queue等等等等等

4、解析性能和byte大小都是非常可观的,可能比proto稍大,当性能应该比proto好。json性能和大小相对都不行~~

但是有一些非常坑的地方:

1、不能夸语言,只能c#直接通信

2、assembly。这是一个大坑。虽然都是c#,接口的class都是copy或者共享的。但还是会因为assembly不一样,而不能序列化

这个问题一般的方法是:解析的时候,重写Serialize的方法,手动指定Type的获取方式,但是并不可用,因为Type还有嵌套Type,如List、Dictionary等

正确的姿势是:把客户端和服务器的Assembbly弄成一样的。

Unity可以通过Create Assembly Define来做到。Visualstudio里面就更简单了

 

posted on 2020-02-21 11:31  慈方阳  阅读(49)  评论(0编辑  收藏  举报

导航