https://msgpack.org/
https://github.com/msgpack/msgpack/blob/master/spec.md#overview
[MessagePack.MessagePackObject(true)]
public class MesFoo
{
[Key(3)]
public int Age { set; get; } = 1;}
var mfoo = new MesFoo();
var byteList = MessagePackSerializer.Serialize(mfoo);
在 [MessagePack.MessagePackObject(false)]
下 key01234 ...
91 01
fixarray 1001xxxx 0x90 - 0x9f
被当做 数组array
array类型 key 最大值区分
0-15
+--------+~~~~~~~~~~~~~~~~~+
|1001XXXX| N objects |
+--------+~~~~~~~~~~~~~~~~~+
16 - (2^16)-1
array 16 stores an array whose length is upto (2^16)-1 elements:
+--------+--------+--------+~~~~~~~~~~~~~~~~~+
| 0xdc |YYYYYYYY|YYYYYYYY| N objects |
+--------+--------+--------+~~~~~~~~~~~~~~~~~+
(2^32)-1
array 32 stores an array whose length is upto (2^32)-1 elements:
+--------+--------+--------+--------+--------+~~~~~~~~~~~~~~~~~+
| 0xdd |ZZZZZZZZ|ZZZZZZZZ|ZZZZZZZZ|ZZZZZZZZ| N objects |
+--------+--------+--------+--------+--------+~~~~~~~~~~~~~~~~~+
一开始 长度位
不存在用null 0xc0 填充。。 nil 11000000 0xc0
fixmap 1000xxxx 0x80 - 0x8f
在 [MessagePack.MessagePackObject(true)]
被当做 Map字典
[Key(0)]
[Key(1)]
96 C0 C3 C0 C0 C0 A9 68 61 6E 62 69 6E 64 73 67
bool 类型
false:
+--------+
| 0xc2 |
+--------+
true:
+--------+
| 0xc3 |
+--------+
int类型
1, 2, 3, 5, or 9 bytes.
1位
0x00 - 0x7F
是 0-127 0x00 - 0x7F 无符号整形 C# sbyte.MaxValue
2位
+--------+--------+
| 0xcc |ZZZZZZZZ|
+--------+--------+
是128-255 从0xCC 0x80到0xCC 0xFF
3位
+--------+--------+--------+
| 0xcd |ZZZZZZZZ|ZZZZZZZZ|
+--------+--------+--------+
是256 开始 0xCD 0x01 0x00 ,256 十六进制是 0100 (0x01 0x00 。2个字节)
以此类推
在 [MessagePack.MessagePackObject(true)]
KeyAttribute直接作废
public int Age { set; get; } = 1;
81 A3 41 67 65 01
81是map字典长度 。fixmap 1000xxxx 0x80 - 0x8f
A3 41 67 65 其中 A3 是string长度位。 fixstr 101xxxxx 0xa0 - 0xbf
41 67 65,其中0x41 大写字符A. A的ASCII码为65(0x41 );
代码参考https://lindexi.gitee.io/post/dotnet-%E4%BD%BF%E7%94%A8-MessagePack-%E5%BA%8F%E5%88%97%E5%8C%96%E5%AF%B9%E8%B1%A1.html