Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何为同一个Serde字段接受多个反序列化名称?_Rust_Serde_Serde Json - Fatal编程技术网

Rust 如何为同一个Serde字段接受多个反序列化名称?

Rust 如何为同一个Serde字段接受多个反序列化名称?,rust,serde,serde-json,Rust,Serde,Serde Json,我试图使用Serde根据以下结构反序列化JSON(Serde JSON)和XML(Serde XML rs)文件: use serde_derive::Deserialize; #[derive(Debug, Clone, PartialEq, Deserialize)] pub struct SchemaConfig { pub name: String, #[serde(rename = "Cube")] pub cubes: Vec<CubeConfig&g

我试图使用Serde根据以下结构反序列化JSON(
Serde JSON
)和XML(
Serde XML rs
)文件:

use serde_derive::Deserialize;

#[derive(Debug, Clone, PartialEq, Deserialize)]
pub struct SchemaConfig {
    pub name: String,
    #[serde(rename = "Cube")]
    pub cubes: Vec<CubeConfig>,
}
使用serde_派生::反序列化;
#[派生(调试、克隆、PartialEq、反序列化)]
pub结构模式图{
酒吧名称:String,
#[serde(rename=“Cube”)]
酒吧立方体:Vec,
}
我正在反序列化的字段根据文件类型具有不同的名称。在本例中,我希望JSON文件有一个带有多维数据集列表的
cubes
键,但XML中的等价项是多个
元素

我不知道如何接受
多维数据集
多维数据集
作为反序列化的键。我找到的最接近的东西是
#[serde(rename=“Cube”)]
选项,但当我使用该选项时,JSON反序列化停止工作,因为它只接受
Cube
键。如果删除该选项,XML反序列化将停止工作,因为它只接受
cubes
作为键


在Serde中有没有一种简单的方法可以实现这一点?

我鼓励您阅读Serde文档。本章介绍了矿山的重点:

#[serde(alias=“name”)]

从给定名称或其名称反序列化此字段。也许 可以重复指定同一字段的多个可能名称

使用serde::反序列化;//1.0.88
使用serde_json;//1.0.38
#[派生(调试、反序列化)]
结构模式图{
#[serde(alias=“fancy_square”,alias=“KUBE”)]
多维数据集:[i32;3],
}
fn main()->结果{
让输入1=r#“{
“花式广场”:[1,2,3]
}"#;
让输入2=r#“{
“KUBE”:[4,5,6]
}"#;
让一个:SchemaConfig=serde_json::from_str(input1)?;
设两个:SchemaConfig=serde_json::from_str(input2)?;
println!(“{:?}”,一);
println!(“{:?}”,两个);
好(())
}

我希望JSON文件有一个带有多维数据集列表的
cubes
键,但XML中的等价项是多个
元素

这听起来好像你想要两种不同的文件结构。在这种情况下,请看以下内容:


感谢您提供代码示例。我确实阅读了文档,但文档中不清楚如何指定多个
alias
值。这里的代码示例非常清楚。
use serde::Deserialize; // 1.0.88
use serde_json; // 1.0.38

#[derive(Debug, Deserialize)]
struct SchemaConfig {
    #[serde(alias = "fancy_square", alias = "KUBE")]
    cube: [i32; 3],
}

fn main() -> Result<(), Box<std::error::Error>> {
    let input1 = r#"{
        "fancy_square": [1, 2, 3]
    }"#;

    let input2 = r#"{
        "KUBE": [4, 5, 6]
    }"#;

    let one: SchemaConfig = serde_json::from_str(input1)?;
    let two: SchemaConfig = serde_json::from_str(input2)?;

    println!("{:?}", one);
    println!("{:?}", two);

    Ok(())
}