相关疑难解决方法(0)

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

我想chrono::NaiveDate使用自定义函数序列化和反序列化,但Serde书籍不包含此功能,代码文档也没有帮助.

#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
extern crate chrono;

use chrono::NaiveDate;


mod date_serde {
    use chrono::NaiveDate;
    use serde::{self, Deserialize, Serializer, Deserializer};

    pub fn serialize<S>(date: &Option<NaiveDate>, s: S) -> Result<S::Ok, S::Error>
    where S: Serializer {
        if let Some(ref d) = *date {
            return s.serialize_str(&d.format("%Y-%m-%d").to_string())
        }
        s.serialize_none()
    }

    pub fn deserialize<'de, D>(deserializer: D)
        -> Result<Option<NaiveDate>, D::Error>
        where D: Deserializer<'de> {
        let s: Option<String> = Option::deserialize(deserializer)?;
        if let Some(s) = s {
            return Ok(Some(NaiveDate::parse_from_str(&s, "%Y-%m-%d").map_err(serde::de::Error::custom)?))
        } …
Run Code Online (Sandbox Code Playgroud)

serialization json rust serde

17
推荐指数
1
解决办法
5000
查看次数

标签 统计

json ×1

rust ×1

serde ×1

serialization ×1