【发布时间】:2020-01-09 15:04:17
【问题描述】:
围绕这个谷歌搜索,我从旧的 .NET 版本等中得到了很多不同的结果。
给定一个消息协议,例如:
- 字节 0-1:消息类型 ID
- 字节 2:消息号
- 字节 3:有效负载大小
- 字节 4...n-1:有效负载数据
- 字节 n,n+1:校验和
我想编写一个 C# 类 Message,它可以使用 byte[] 进行序列化和反序列化,理想情况下它的核心可能是这样的(我使用属性,但如果重要,成员就可以了)
class Message
{
public Int16 Type {get; set;}
public byte Number {get; set;}
public byte PayloadSize {get; set;}
public byte[] Payload{get; set;}
public Int16 CheckSum {get; set;}
}
当然,编写代码来做到这一点很容易,但我知道 .NET 确实具有一些自动(反)序列化功能,可以很好地避免在枯燥的样板代码中出现编码错误。但是我需要保证顺序等,以便遵循协议。
现代 .NET Framework (4.x) 是否允许自动执行此操作?如果可以,它是什么?例如,如何控制属性排序?我将如何实际从/到byte[] 实例化和序列化对象?
我应该补充一点,我知道可以使用反射来编写这种东西,但是一个比它解决的问题更多的解决方案并没有多大用处。除非经过充分测试,否则我也不热衷于使用某些代码库,这确实是关于内置 C# 功能的问题。
【问题讨论】:
-
BinarySerializer 怎么样 - 请参阅 stackoverflow.com/questions/30918176/…
-
使用具有顺序布局的结构:stackoverflow.com/questions/628843/…。但不要认为它适用于您的字节数组。
-
@auburg 不,你不想使用
BinaryFormatter,在这种情况下你不能,因为它有自己的格式。参见例如stackoverflow.com/questions/5284641/…。您的意思可能是BinaryReader,但这正是 OP 似乎想要避免的。
标签: c# .net serialization