You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I just encountered this somewhat strange behavior. Trying to deserialize a very simple RON string into a serde_json::Value fails with an ExpectedIdentifier error:
let json: serde_json::Value = ron::from_str("(f1: 0, f2: 1)").unwrap();
I know that RON is not meant to be a self describing format and supports more types than JSON, but I expected this simple structure to be deserialized correctly; the identifiers should support deserializing to string keys.
The trigger of the error is that the serde_json::Value type expect owned String keys. After some investigating, it seems that the problem is related to the id::Deserializer variant, which supports deserialize_str(..), but NOT deserialize_string(..), which I find somewhat inconsistent. These methods should give the same result; the reason for having two methods is to give hints about expected string ownership (for performance reasons).
The following patch in de/id.rs file makes the code example work as expected:
// de::id.rs, line 147:fndeserialize_string<V>(self,visitor:V) -> Result<V::Value>whereV:Visitor<'b>,{// Err(Error::ExpectedIdentifier)self.deserialize_identifier(visitor)// Same as deserialize_str behavior}
The text was updated successfully, but these errors were encountered:
grindvoll
changed the title
Problem deserializing Structs when deserialization target expect owned String keys
Problem deserializing maps when deserialization target expect owned String keys
Sep 29, 2023
Thank you @grindvoll for reporting and investigating this issue! This sounds like an easy-enough change to me. Would you like to file a PR yourself that also adds a test with your usecase? I'm unfortunately quite swamped with uni at the moment.
I just encountered this somewhat strange behavior. Trying to deserialize a very simple RON string into a
serde_json::Value
fails with anExpectedIdentifier
error:I know that RON is not meant to be a self describing format and supports more types than JSON, but I expected this simple structure to be deserialized correctly; the identifiers should support deserializing to string keys.
The trigger of the error is that the
serde_json::Value
type expect ownedString
keys. After some investigating, it seems that the problem is related to theid::Deserializer
variant, which supportsdeserialize_str(..)
, but NOTdeserialize_string(..)
, which I find somewhat inconsistent. These methods should give the same result; the reason for having two methods is to give hints about expected string ownership (for performance reasons).The following patch in
de/id.rs
file makes the code example work as expected:The text was updated successfully, but these errors were encountered: