Use serde_with and its #[serde(rename = "$key$")]
.
use serde_with::{serde_as, KeyValueMap};
#[derive(Serialize, Deserialize)]
struct Item {
#[serde(rename = "$key$")]
name: String,
some_field: usize,
}
// This would be the enclosing type
#[serde_as]
#[derive(Serialize, Deserialize)]
struct MyMap(
#[serde_as(as = "KeyValueMap<_>")]
Vec<Item>,
);