Comments (1)
Sniffing at eg the output of cargo expand
, it looks like the basic reason this is happening is because the derived Deserialize
implementations for untagged/internally-tagged enums use .deserialize_any()
(+ Content
?) which has to sort of "blindly" decide what to do with a JSON string that it encounters, and so understandably defaults to trying to deserialize it as a "string" (vs as "bytes")
So I'm assuming this should not be considered a "bug" of any kind but am curious if there are known strategies that would enable using serde
/serde_json
to deserialize eg internally-tagged enums with fields that may contain unpaired surrogates?
The two general ideas that I can picture are:
- Have like an alternate version of
serde_json
whose.deserialize_any()
defaults to treating JSON strings as bytes, not as strings - If you know that your "tag" field should come first in the JSON (which I think is a safe assumption/invariant in my use case) then it seems like you could defer deserializing the rest of the JSON object keys/values until after you've deserialized/"recognized" the tag field (at which point you could then avoid using
.deserialize_any()
because you'd know which enum variant you were deserializing, similar to how I'm assuming that "externally tagged" enums apparently avoid this issue)?
from json.
Related Issues (20)
- features_check/error.rs interferes with static analysis
- In Rust 1.78+, too many errors get printed when building with neither "std" nor "alloc" HOT 2
- Adding languages to the serde-rs organization HOT 1
- Enum deserialization not working HOT 1
- Am I passing metadata through DeserializeSeed to facilitate deserialization of algebraic datatypes as intended HOT 2
- Serialize enum - only tag
- Implement `Deserializer` for `Map<String, Value>` and `&Map<String, Value>`
- Writing to fmt::Formatter
- Example on "Creating JSON by serializing data structures" doesn't work.
- [Bug] Fails to parse root string array HOT 3
- Discrepancy between serde_json::from_{reader,str}
- Unrecoverable JSON Deserialization Error on Unexpected Enum Variant: "trailing characters" HOT 1
- Unable to differentiate `None` and `Some(Value::Null)` HOT 3
- Non-obvious error message when unable to borrow string and there aren't obvious escape sequences HOT 1
- not ignoring unknow field by default and how do i make this work? HOT 1
- Internally tagged enums duplicate tag when struct also has it assigned
- Weird behaviour when deserializing a `RawValue` through a `Visitor`. HOT 1
- No method named `shift_insert` found for struct `IndexMap` in the current scope HOT 1
- How to Add Resiliency to Errors in a `no_std` and `no_alloc` Context ? HOT 2
- Untagged Enum Bug (?) HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from json.