假设应该读取以下JSON:
let json = r#"{
"scjson": [
{ "StateMachine": { "id": "sm_1" } },
{ "StateMachine": { "id": "sm_2" } }
]
}"#;
换句话说:一个状态机数组,每个状态机都有一个字符串类型的字段“id”。
我怎么用serde反序列化这个呢?我试过:
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
pub struct StateMachine {
id: String,
}
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
pub struct Scjson {
scjson: Vec<StateMachine>,
}
但ID永远不会反序列化。
最后,我想解析一下:
scjson:
- StateMachine:
id: "sm_1"
states:
- AtomicState:
id: atomic_1
- AtomicState:
id: atomic_2
transitions:
- Transition: { event: "E1", executable_content: "asdf" }
- ParallelState:
InitialTransition: { }
- CompoundState:
id: compound_1
initialTransition: { event: "E2", condition: "some condition" }
- StateMachine:
id: "sm_2"
states:
- FinalState:
id: "asdf"
onEntry: "17"
1条答案
按热度按时间62o28rlo1#
缺少一层间接寻址。
scjson
键包含一个YAML字典列表,其中每个字典都有一个键StateMachine
,其值是另一个字典,该字典只有一个键id
。以下是固定版本:
这是一个简单明了的解决方案,但似乎无论生成YAML/JSON的是什么,都会使用
StateMachine
和类似的键来编码元素类型,如果是这种情况,那么enum
就是正确的答案: