Serialization 如何仅序列化变量的名称并忽略结构(serde)中枚举字段的值
根据定义:Serialization 如何仅序列化变量的名称并忽略结构(serde)中枚举字段的值,serialization,struct,rust,enums,serde,Serialization,Struct,Rust,Enums,Serde,根据定义: #[派生(序列化、反序列化)] 枚举条{ A(i64), B(u64), } #[派生(序列化、反序列化)] 结构Foo{ 酒吧:酒吧,, } 的JSON序列化 Foo{ 巴:巴::A(123), } 将是: { “酒吧”:“A” } 最好在结构中的字段中添加属性,而不是在枚举定义中添加属性(枚举将在需要序列化值的结构字段中重用)该属性可用于元组变量字段: use serde::{Serialize, Deserialize}; // 1.0.126 use serde_jso
#[派生(序列化、反序列化)]
枚举条{
A(i64),
B(u64),
}
#[派生(序列化、反序列化)]
结构Foo{
酒吧:酒吧,,
}
的JSON序列化
Foo{
巴:巴::A(123),
}
将是:
{
“酒吧”:“A”
}
最好在结构中的字段中添加属性,而不是在枚举定义中添加属性(枚举将在需要序列化值的结构字段中重用)该属性可用于元组变量字段:
use serde::{Serialize, Deserialize}; // 1.0.126
use serde_json; // 1.0.64
#[derive(Serialize, Deserialize)]
enum Bar {
A(#[serde(skip)] i64),
B(#[serde(skip)] u64),
}
#[derive(Serialize, Deserialize)]
struct Foo {
bar: Bar,
}
fn main() {
let foo = Foo { bar: Bar::A(123) };
println!("{}", serde_json::to_string(&foo).unwrap());
}
{“bar”:“A”}
如果不选择修改条形图
,则必须通过或手动执行更多操作:
“你认为值得为这个做另一个枚举还是用手工的方式?”JawadAhmed对你说。如果您只在其他地方按名称使用另一个枚举,那么它可能是值得的,但是像这样的一个孤立案例我不会担心。我将坚持后一种方法,这将使事情总体上不那么复杂,谢谢:)
use serde::{Serialize, Deserialize, ser::Serializer}; // 1.0.126
use serde_json; // 1.0.64
#[derive(Serialize, Deserialize)]
enum Bar {
A(i64),
B(u64),
}
#[derive(Serialize, Deserialize)]
struct Foo {
#[serde(serialize_with = "bar_name_only")]
bar: Bar,
}
fn bar_name_only<S>(bar: &Bar, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let name = match bar {
Bar::A(_) => "A",
Bar::B(_) => "B",
};
serializer.serialize_str(name)
}
fn main() {
let foo = Foo { bar: Bar::A(123) };
println!("{}", serde_json::to_string(&foo).unwrap());
}