我已经成功地用于serde_json
反序列化和序列化 JSON。我的设置看起来有点像这样(非常简单):
use serde::{Deserialize, Serialize};
use serde_json;
use serde_with::skip_serializing_none;
#[skip_serializing_none]
#[derive(Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
struct Foo {
#[serde(flatten)]
bar: Option<Bar>,
baz_quux: Option<u8>,
}
#[skip_serializing_none]
#[derive(Deserialize, Serialize)]
struct Bar {
#[serde(rename = "plughXyzzySomeRandomStuff")]
plugh_xyzzy: Option<u8>
}
Run Code Online (Sandbox Code Playgroud)
然后我实现了FromStr
and Display
on Foo
,它依次调用serde_json::from_str
和serde_json::to_string
,以轻松(反)序列化该结构。
但是,我现在还想支持serde_ini
将 INI 文件序列化(反序列化)到相同的 Rust 数据结构。但我真的不知道该怎么做。
结构本身很简单,但我的具体问题在于属性:
#[serde(rename)]
和#[serde(rename_all)]
属性,但我不确定在哪里或如何解决。#[serde(flatten)]
似乎不适用于的serde_ini
全字符串值,它需要#[serde(deserialize_with="from_str)]"
所有非字符串值的属性,但这显然只适用于 INI 值,而不适用于 JSON 值。 …