小编use*_*266的帖子

在反序列化时是否有更简单的方法来转换类型?

使用serde_json,我有String我需要转换为浮点数的JSON对象.我偶然发现了一个自定义解串器解决方案,但它似乎是一个黑客攻击. 这是下面代码的工作游乐场示例.

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

use serde_json::Error;
use serde::de::{Deserialize, DeserializeOwned, Deserializer};

#[derive(Serialize, Deserialize)]
struct Example {
    #[serde(deserialize_with = "coercible")]
    first: f64,
    second: f64,
}

fn coercible<'de, T, D>(deserializer: D) -> Result<T, D::Error>
where
    T: DeserializeOwned,
    D: Deserializer<'de>,
{
    use serde::de::Error;
    let j = String::deserialize(deserializer)?;
    serde_json::from_str(&j).map_err(Error::custom)
}

fn typed_example() -> Result<(), Error> {
    let data = r#"["3.141",1.618]"#;
    let e: Example = serde_json::from_str(data)?;
    println!("{} {}", e.first * 2.0, e.second * 2.0); …
Run Code Online (Sandbox Code Playgroud)

rust serde serde-json

6
推荐指数
2
解决办法
812
查看次数

标签 统计

rust ×1

serde ×1

serde-json ×1