问题标签 [serde]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 有没有办法将 Serde Map 转换为 Value?
根据 Serde 规范,Object
/Map<String, Value>
是Value
:
然而,当我编译这段代码时:
我收到此错误:
有没有办法将 a 转换Map
为 a Value
?
rust - 我可以使用自己的序列化结构在 Rocket 中渲染模板吗?
我正在使用Rocket,我正在尝试创建一个Layout
结构。我已经实现serde::Serialize
了,因为文档说静态方法Template::render
的第二个参数接受一个实现的结构Serialize
:
我得到错误
我做错了什么?
rust - 函数局部变量的寿命不够长
我正在尝试围绕 serde_json 和 Rocket 编写一个包装器,FromData
以强类型化我与服务器交换的一些 JSON。
我无法编译以下代码:
编译器的错误:
因为data_from_reader
, value
and unwraped_value
come fromdata
我认为编译器可以推断出它具有相同的生命周期,但显然情况并非如此。有什么办法可以说明或做一些在这种情况下可行的事情吗?
json - How to deserialize a JSON file which contains null values using Serde?
I want to deserialize the chemical elements JSON file from Bowserinator on github using Serde. For this I created a structure with all the needed fields and derived the needed macros:
This works fine until it gets to fields which contain a "null" value.
E.g. for the field "color": null,
in Helium.
The error message I get is { code: Message("invalid type: unit value, expected a string"), line: 8, column: 17 }
for this field.
I experimented with the #[serde(default)]
Macro. But this only works when the field is missing in the JSON file, not when there is a null
value.
I like to do the deserialization with the standard macros avoiding to program a Visitor Trait. Is there a trick I miss?
serialization - 如果有的话,如何在 Rust 中添加多态特征对象的反序列化?
我正在尝试解决序列化和反序列化的问题Box<SomeTrait>
。我知道在封闭类型层次结构的情况下,推荐的方法是使用枚举并且它们的序列化没有问题,但在我的情况下使用枚举是一个不合适的解决方案。
起初我尝试使用 Serde,因为它是事实上的 Rust 序列化机制。Serde 能够序列化Box<X>
,但不能在 whenX
是一个特征的情况下。Serialize
不能为 trait 对象实现 trait,因为它具有泛型方法。这个特殊问题可以通过使用擦除的serde来解决,这样序列化就Box<SomeTrait>
可以工作了。
主要问题是反序列化。要反序列化多态类型,您需要在序列化数据中有一些类型标记。此标记应首先反序列化,然后用于动态获取将返回的函数Box<SomeTrait>
。
std::any::TypeId
可以用作标记类型,但主要问题是如何动态获取反序列化函数。我不考虑为每个应在应用程序初始化期间手动调用的多态类型注册一个函数的选项。
我知道两种可能的方法:
- 像 C# 这样具有运行时反射的语言可以使用它来获取反序列化方法。
- 在 C++ 中,谷物库使用静态对象的魔法在库初始化时将反序列化器注册到静态映射中。
但是这些选项在 Rust 中都不可用。如果有的话,如何在 Rust 中添加多态对象的反序列化?
json - 如何使用 Serde 反序列化带有自定义函数的可选字段?
我想chrono::NaiveDate
用自定义函数对 a 进行序列化和反序列化,但 Serde 书并未涵盖此功能,代码文档也无济于事。
我知道这Option<chrono::NaiveDate>
很容易被 Serde 反序列化,因为 Chrono 支持 Serde,但我正在尝试学习 Serde,所以我想自己实现它。当我运行此代码时,出现错误:
json - 如何使用 Serde 从原始结构的 JSON 反序列化结构的子字段?
我想让Test::team_size
属性从Test
对象本身的数据中反序列化:
这段代码无法编译,我不知道如何让 Serde 做我想做的事。在这个例子中,有没有办法team_size
从作为子字段的原始结构的 JSON 反序列化?
似乎我想要的 #[serde(untagged)]
只是一个结构和一个字段而不是整个结构。
rust - 如何使用 serde 和 bincode 映射一个填充超过 32 个字节的 C 结构?
我正在使用 serde 和 bincode 映射二进制结构。
事情按预期工作,但我无法映射保留字段。显然,固定大小的数组仅定义为最大 32 字节的大小。
如何注册我的自定义大小的数组,以便对填充进行反序列化?
serde+bincode 是正确的方法吗?我需要控制字节顺序(bincode 提供),我喜欢声明式风格。