Sie die serialize_with
attribute können a custom serialization function für Ihren Bereich zu schaffen:
#[macro_use]
extern crate serde_derive;
extern crate serde;
use serde::Serializer;
fn round_serialize<S>(x: &f32, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
s.serialize_f32(x.round())
}
#[derive(Debug, Serialize)]
pub struct NodeLocation {
#[serde(rename = "nodeId")]
id: u32,
#[serde(serialize_with = "round_serialize")]
lat: f32,
#[serde(serialize_with = "round_serialize")]
lon: f32,
}
(Ich habe auf die nächste ganze Zahl gerundet, das Thema zu vermeiden „, was ist beste Weg, einen Schwimmer abzurunden k Nachkommastellen").
Der andere Halb manuelle Ansatz ist eine separate Struktur mit Auto-abgeleitete Serialisierung zu erstellen und Ihre Serialisierung implementieren mit, dass:
impl Serialize for NodeLocation {
fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
// Implement your preprocessing in `from`.
RoundedNodeLocation::from(loc).serialize(s)
}
}
manuell implementieren 'Serialize'? – Kroltan