【发布时间】:2023-01-08 02:00:52
【问题描述】:
尝试将两个不同的 Vec 字段序列化为 JSON 输出中的单个数组。我不知道如何实现 serialize() 方法:
struct Base<'a> {
workspace: Vec<Workspace<'a>>,
methods: Vec<Request<'a>>,
// other fields ...
}
impl Serialize for Base<'_> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let mut state = serializer.serialize_struct("Base", 5)?;
state.serialize_field("resources", &self.methods)?;
state.serialize_field("resources", &self.workspace)?;
// other fields ...
state.end()
}
}
我想将 workspace 和 methods 字段一起序列化,但是最后一个 "resources" 字段会覆盖第一个字段。我尝试使用类似这样的方法解决它,但它会产生错误,因为 serializer 移动:
let mut resources = serializer.serialize_seq(Some(self.workspace.len() + self.methods.len()))?;
self.workspace.iter().for_each(|f| { resources.serialize_element(f); });
self.methods.iter().for_each(|f| { resources.serialize_element(f); });
resources.end();
那我怎么把这两个联系在一起呢?
【问题讨论】:
-
您希望您的输出看起来如何?比如说你有一个
Base { workspace: vec![0, 2], methods: vec![1, 3] },你想要"resources": [0,1,2,3]还是"resources": [[0,2], [1,3]]还是"resources": [{"workspace": 0, "methods": 1},{"workspace": 2, "methods": 3}]?
标签: json rust serde serde-json