如何将二进制码序列化数据反序列化为类似 serde_json::Value 的内容?

How can I deserialize a bincode serialised data into something like serde_json::Value?

提问人:atamakahere 提问时间:10/18/2023 最后编辑:atamakahere 更新时间:10/18/2023 访问量:56

问:

我有一个IPC实现,其中进程使用bincode序列化结构

另一方面,我正在接收它,假设这个过程不知道它正在接收的结构, 在这里,我想做类似的事情

let parsed: Result<serde_json::Value, serde_json::Error> = serde_json::from_str(json_str);

但是有了 Bincode,这可能吗?

我试过做

let deser = bincode::deserialize::<serde_json::Value>(msg.bytes()))?;

但它会抛出错误

Error: Bincode does not support the serde::Deserializer::deserialize_any method
json rust serde bincode

评论


答:

5赞 cafce25 10/18/2023 #1

你不能,因为二进制码反序列化程序必须被告知预期的类型,但依赖于反序列化程序来告诉它下一个类型是什么。这两个要求相互矛盾。 这在deserialize_any的文档中也有表达:serde_json::Value

在实现时,你应该避免依赖,除非你需要被告知输入中的类型是什么。要知道,依赖意味着您的数据类型将能够仅从自描述格式反序列化,从而排除了明信片和许多其他格式。DeserializeDeserializer::deserialize_anyDeserializerDeserializer::deserialize_any

bincode是那些描述自己的格式之一。