Gateway V4 的msgpack打包疑问

#1

通过后台建立的websocket。可以收到 Gateway V4发来的数据,回复后能够收到每秒一次的数据,根据wiki,数据采用msgpack方式打包,但尝试多次后任然无法解包, 收到的bytes包如下
82 FE 00 C3 F5 03 6A 3D 73 A2 1C 9A C4 2D 58 13 C0 2D 53 9E 98 6A 0E F3 F5 03 59 BC 51 77 03 50 90 CD 6A 3D FA 29 C8 54 85 AD 5B 04 C7 2D 5B 0B CD 2D 59 0C DB 32 5F 0B 56 6E 0B 5E 59 40 29 08 C5 46 59 7C CD 37 58 0D C5 A4 0E 58 83 6A 09 58 86 90 AE 1B F5 F7 D2 63 AC A7 85 99 F7 02 6C 27 0A 4F 6A 3F E0 E1 AF 50 40 DC 91 75 27 B3 0A ED 00 A4 7A AB 15 03 A5 05 F7 C5 AE 1B F5 11 51 57 EE 6B D2 F4 F7 02 6C 27 0A 4F 6A 3F E0 B6 DB BF 32 E9 DB 74 7D A9 F3 88 34 52 1A 35 2C 03 6B 85 9D C6 AE 1A F5 F7 D2 63 AC A7 85 98 F7 02 6C 27 0A 4F 6A 3F E0 E1 AF 50 40 DC 91 75 27 B3 0A ED 00 A4 7A AB 15 03 A5 05 F7 C5 2F

根据https://msgpack.org/的说明 82开头的,是只有两个key 的json。想问下,Gateway V4发出的数据,在序列化前的大概json格式的是怎么样子的,比如
{“key1”:“value1”,“key2”:“value2”}是全部为字符串还是不同类型。

采用C#环境

#2

请问你可以试试这个msgpack库么?示例的注释都是中文的。

根据wiki上的数据格式,数据解开后有这些key

  • v - firmware version, string
  • mid - message ID, integer
  • time - 启动时长,以秒计算, integer
  • ip - gateway的IP
  • mac - gateway的mac address

还有一个key是devices,这个是一个array

如果可以成功,烦请给出示例代码,谢谢

#3

public class ibeaconPack
{
public string v { get; set; }
public int mid { get; set; }
public int time { get; set; }
public string ip { get; set; }
public string mac { get; set; }
public byte[] devices { get; set; }
}

使用这个类进行解码,会提示错误,就是devices 的类型有问题,其他可以解析出来了。

#4

也请尝试另外一个库的例子Sample02_HandlingDynamicObject.cs。这个例子的最后一段并不需要知道key的类型,这样可能用起来比较方便

			// 5. Use MessagePackSerializer to deserialize target object from MessagePackObject
			var targetObject2 = serializer.FromMessagePackObject( mpo );
			Debug.WriteLine( "---- FromMessagePackObject ----" );
			Debug.WriteLine( "Id : {0}", targetObject2.Id );
			Debug.WriteLine( "Title : {0}", targetObject2.Title );
			Debug.WriteLine( "Date : {0}", targetObject2.Date );
			Debug.WriteLine( "Image : {0}", Convert.ToBase64String( targetObject2.Image ) );