質問: MessagePackBinary.ReadBytes(byteArray,0, out kkk); エラー内容 InvalidOperationException: code is invalid. code:99 format:positive fixint MessagePack.Decoders.InvalidBytes.Read (System.Byte[] bytes, Int32 offset, System.Int32& readSize) (at Assets/Scripts/MessagePack/MessagePackBinary.cs:3732) MessagePack.MessagePackBinary.ReadBytes (System.Byte[] bytes, Int32 offset, System.Int32& readSize) (at Assets/Scripts/MessagePack/MessagePackBinary.cs:1031) Program.TTTT () (at Assets/Scripts/MsgPackTest.cs:100) MsgPackTest.Start () (at Assets/Scripts/MsgPackTest.cs:19) お手数ですが、どなたかご教授いただければ幸いです。
回答: `Dictionary`で大雑把にデシリアライズしてから辿るか、 パフォーマンスを重視するなら完全マニュアル操作でスキップしていくという手もあります。 ``` /// objectでDeserializeするとDictionary[object, object]で取れる { var data = MessagePackSerializer.Deserialize(byteArray) as IDictionary; var target = (data["test"] as object[])[0] as IDictionary; } // 効率重視なら完全マニュアルで取るという手もあります { var offset = 0; var targetIndex = 1; MessagePackBinary.ReadMapHeader(byteArray, offset, out var readSize); // { offset += readSize; offset += MessagePackBinary.ReadNext(byteArray, offset); // "test" MessagePackBinary.ReadArrayHeader(byteArray, offset, out readSize); // [ offset += readSize; for (int i = 0; i < targetIndex; i++) { offset += MessagePackBinary.ReadNextBlock(byteArray, offset); // ..., } // 手動でとってもいいし、Dictionaryで取ってもいいし、型をあててもいい var target = MessagePackSerializer.Deserialize(new ArraySegment(byteArray, offset, byteArray.Length - offset)); } ```