栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Serde使用自定义函数反序列化可选字段?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Serde使用自定义函数反序列化可选字段?

结构反序列化的默认行为是,当字段不以序列化形式出现时,为其分配各自的默认值。请注意,这与container

#[serde(default)]
属性
不同,container 属性用结构的默认值填充字段。

#[derive(Debug, PartialEq, Deserialize)]pub struct Foo<'a> {    x: Option<&'a str>,}let foo: Foo = serde_json::from_str("{}")?;assert_eq!(foo, Foo { x: None });

但是,当我们使用另一个反序列化函数(

#[serde(deserialize_with ="path")]
)时,此规则会更改。
Option
这里的类型字段不再告诉反序列化器该字段可能不存在。相反,它表明存在一个字段,其内容可能为空或空(
none
以Serde术语)。在
serde_json
,例如,
Option<String>
是Javascript相当于“任一
null
string
”(
null| string
在打字稿/流量表示)。下面的代码与给定的定义和日期反序列化器可以正常工作:

let test: Test = serde_json::from_str(r#"{"i": 5, "date": null}"#)?;assert_eq!(test.i, 5);assert_eq!(test.date, None);

幸运的是,仅通过添加

serde(default)
属性(
Option::default
yields
None
),反序列化过程就可以变得更加宽松:

#[derive(Debug, Serialize, Deserialize)]struct Test {    pub i: u64,    #[serde(default)]    #[serde(with = "date_serde")]    pub date: Option<NaiveDate>,}

操场



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号