C#自定义编码和解码/序列化为流

时间:2015-08-11 11:15:00

标签: c# sockets serialization encoding

我遇到了以下问题:我正在使用TcpClients / Streams与另一个应用程序进行通信。

此应用程序需要传递给它的输入参数,以特殊方式编码(第一个字节:参数类型标识符,接下来的4个字节:内容长度;下一个长度字节:内容)。

应用程序处理输入并以相同的格式返回输出。我的问题是我通常不知道不同返回值的确切顺序。应用程序可以不返回任何内容,一个int,5个int,2个和一个IntArray ......

编辑:为了澄清这一点,我无法更改我正在与之通信的应用程序的基础协议或源代码!

问题在于我希望能够使用params,就好像它们是" native" C#对象。 我尝试实现的是以下方法:

https://dotnetfiddle.net/ZjbUix

我不确定这是不是一个好主意。对于所有可能的参数类型,使用EncodingStream(NetworkStream) Write()方法,以及DecodingStream(NetworkStream) GetInt()GetIntArray()等方法,这可能是更好的选择。 。但是,这或多或少会忽略类型标识符,只能通过抛出异常来防止"尝试读取Int值但发现Int Array参数类型"。

编辑:我在此处实施了此版本:https://dotnetfiddle.net/8WVXPz

另一个要求是应该可以轻松添加新的参数类型,同时最好在编译时检测错误。此外,我更喜欢非反射解决方案。

也许有人可以组建一个更好的架构来支持这个?

0 个答案:

没有答案