serialization/
serialization.rs1use bevy::{
9 prelude::*,
10 reflect::serde::{ReflectDeserializer, ReflectSerializer},
11};
12use serde::de::DeserializeSeed;
13
14fn main() {
15 App::new()
16 .add_plugins(DefaultPlugins)
17 .add_systems(Startup, (deserialize, serialize).chain())
18 .run();
19}
20
21#[derive(Reflect)]
23pub struct Player {
24 name: String,
25 health: u32,
26}
27
28const PLAYER_JSON: &str = r#"{
29 "serialization::Player": {
30 "name": "BevyPlayerOne",
31 "health": 50
32 }
33}"#;
34
35fn deserialize(type_registry: Res<AppTypeRegistry>) {
36 let type_registry = type_registry.read();
37
38 let value: serde_json::Value = serde_json::from_str(PLAYER_JSON).unwrap();
40
41 let deserializer = ReflectDeserializer::new(&type_registry);
44 let reflect_value = deserializer.deserialize(value).unwrap();
46 info!(?reflect_value);
49}
50
51fn serialize(type_registry: Res<AppTypeRegistry>) {
52 let type_registry = type_registry.read();
53
54 let value = Player {
56 name: "BevyPlayerSerialize".to_string(),
57 health: 80,
58 };
59
60 let serializer = ReflectSerializer::new(&value, &type_registry);
63 let json = serde_json::to_string(&serializer).unwrap();
64 info!(?json);
65}