【发布时间】:2021-09-23 01:16:38
【问题描述】:
从描述拼图网格的结构中,我希望能够序列化嵌套数组:
struct Grid {
display: String,
solution: String,
width: usize,
height: usize,
}
假设结构为 Grid { display: "????", solution: "1234", width: 2, height: 2 },我希望输出如下所示(以 JSON 格式):
[
[
{
"display": "?",
"solution": "1"
},
{
"display": "?",
"solution": "2"
}
],
[
{
"display": "?",
"solution": "3"
},
{
"display": "?",
"solution": "4"
}
]
]
我的初始实施草案如下所示:
impl<'a> Serialize for Grid<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
let mut columns = serializer.serialize_seq(Some(self.height))?;
for column_index in 0..self.height {
let mut column = columns.serialize_seq(Some(self.width))?;
for row_index in 0..self.width {
let mut cell = column.serialize_map(Some(2))?;
let cell_index = column_index * self.height + row_index;
cell.serialize_entry("display", self.display.chars().nth(cell_index).unwrap())?;
cell.serialize_entry("solution", self.solution.chars().nth(cell_index).unwrap())?;
cell.end()?;
}
column.end()?;
}
columns.end()
}
}
但是,SerializeSeq 不会公开另一个 serialize_seq 方法以进行进一步嵌套。如何从一个这样的结构中序列化嵌套数组?
【问题讨论】:
-
从长远来看,编写自定义序列化程序可能是最好的选择,但我想编写
struct Item { display: String, solution: String }然后在Grid上编写一个方法会很容易(如果效率低下)返回和/或序列化Vec<Vec<Item>>。 -
你也需要第二个结构来实现序列化,最后可能还有第三个