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里面就更简单了