在数据库列中,存储了使用ygoe/msgpack.js JavaScript 库序列化的 JSON 中的字节。
在 C# 中,我使用neuecc/MessagePack-CSharp库将此值反序列化为 JSON:
//From database (bytes generated from JavaScript ygoe/msgpack.js)
var bytes = connection.Query<byte[]>(sql).FirstOrDefault(); //Size: 11160 - Get bytes from database
var hexa = System.Text.Encoding.UTF8.GetString(bytes); //=> Value: 8ca76...
var hexaString = FromHexString(hexa); //=> Value: ��meeting��id�\0\r�ۭmeetingNumber�2018194530...
var test1 = MessagePackSerializer.Deserialize<dynamic>(bytes); //=> Value: 56
var test2 = MessagePackSerializer.Deserialize<RootObject>(bytes); //=> System.InvalidOperationException: 'code is invalid. code:56 format:positive fixint'
var test3 = MessagePackSerializer.ToJson(bytes); //=> Value: "56"
//Manually
var jsonTest = "...JSON data..."; //Paste hexa on an online tool and use associated JSON (https://toolslick.com/conversion/data/messagepack-to-json#)
var test4 = MessagePackSerializer.Serialize(json); //Size: 10893
var test5 = MessagePackSerializer.Deserialize<dynamic>(test4); //OK
var test6 = MessagePackSerializer.Deserialize<RootObject>(test4); //System.InvalidOperationException: 'code is invalid. code:218 format:str 16'
var test7 = MessagePackSerializer.FromJson(json); //Size: 5928
var test8 = MessagePackSerializer.ToJson(test7); //OK
正如你在上面看到的,我尝试了几种反序列化的方法,但都没有奏效。我经常在输出中得到 56 或 218,但我的 JSON 不包含此值。我尝试了所有解析器,但都没有用。
但是,当在这个网站上复制/粘贴十六进制时,我能够获得 JSON,这意味着数据库中的字节似乎是有效的。
知道什么可能是错的吗?
函数式编程
相关分类