serde-rs / json

Strongly typed JSON library for Rust
Apache License 2.0
4.7k stars 536 forks source link

Unable to differentiate `None` and `Some(Value::Null)` #1143

Open dariocurr opened 3 weeks ago

dariocurr commented 3 weeks ago

As the following example shows, I am unable to differentiate between two different cases:

use serde::{Deserialize, Serialize};

#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct MyStruct {
    value: Option<serde_json::Value>
}

fn main() {

    let my1: MyStruct =serde_json::from_str("{}").unwrap();
    assert_eq!(my1, MyStruct {value: None}); // OK

    let my2: MyStruct = serde_json::from_str("{\"value\": null}").unwrap();
    assert_eq!(my2, MyStruct {value: Some(serde_json::Value::Null)}); // Error

}

This happens because null is deserialized as None instead of Some(Value::Null)