如何将 bincode 序列化数据反序列化为 serde_json::Value 之类的数据?

ata*_*ere 2 json rust serde bincode

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

在另一端,我正在接收它,可以说这个进程不知道它正在接收的结构,在这里,我想做类似的事情

let parsed: Result<serde_json::Value, serde_json::Error> = serde_json::from_str(json_str);
Run Code Online (Sandbox Code Playgroud)

但是用bincode,有可能吗?

我尝试做

let deser = bincode::deserialize::<serde_json::Value>(msg.bytes()))?;
Run Code Online (Sandbox Code Playgroud)

但它会抛出错误

Error: Bincode does not support the serde::Deserializer::deserialize_any method
Run Code Online (Sandbox Code Playgroud)

caf*_*e25 6

不能,因为必须告知 bincode 反序列化器所需的类型,但serde_json::Value要依赖反序列化器来告诉它下一个是什么类型。这两个要求相互矛盾。这也体现在以下文档deserialize_any中:

实现时Deserialize,您应该避免依赖,Deserializer::deserialize_any除非您需要知道Deserializer输入中的类型。要知道,依赖Deserializer::deserialize_any意味着您的数据类型将只能从自描述格式进行反序列化,排除明信片和许多其他格式。

bincode是不描述自身的格式之一。