Skip to content

Serialize Table #640

@MrNathanStiles

Description

@MrNathanStiles

When using serde feature to serialize a table keys are coerced to string and data is missing from serialization.

cargo.toml

[package]
name = "mlua_serde_bug"
version = "0.2.0"
edition = "2024"

[dependencies]
mlua = { version = "0.11.1", features = ["luau", "send", "serde"] }
serde = { version = "1.0.219", features = ["serde_derive"]}
serde_json = "1.0.143"
anyhow = { version = "1.0", optional = true }

main.rs

use mlua::{Lua, LuaSerdeExt, Result, Table, Value};
use serde::Deserialize;

fn main() -> Result<()> {
    let lua = Lua::new();
    let value: Value = lua.load(r#"{["1"]="text one",[1]="number one"}"#).eval()?;
    let table: &Table = value.as_table().unwrap();

    let n1 = table.raw_get::<String>(1).unwrap();
    println!("n1 {}", n1);
    let t1 = table.raw_get::<String>("1").unwrap();
    println!("t1 {}", t1);
    assert!(n1 == "number one".to_owned());
    assert!(t1 == "text one".to_owned());

    let serialized = serde_json::to_string(&value).unwrap();
    let deserialized: serde_json::Value = serde_json::from_str(&serialized).unwrap();
    let value: Value = lua.to_value(&deserialized).unwrap();
    let table: Table = value.as_table().unwrap().clone();

    let n1 = table.raw_get::<String>(1).unwrap();
    println!("n1 {}", n1);
    let t1 = table.raw_get::<String>("1").unwrap();
    println!("t1 {}", t1);
    assert!(n1 == "number one".to_owned());
    assert!(t1 == "text one".to_owned());

    Ok(())
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions