问题标签 [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.

0 投票
1 回答
2185 浏览

rust - 有没有办法将 Serde Map 转换为 Value?

根据 Serde 规范,Object/Map<String, Value>Value

然而,当我编译这段代码时:

我收到此错误:

有没有办法将 a 转换Map为 a Value

0 投票
2 回答
258 浏览

rust - 我可以使用自己的序列化结构在 Rocket 中渲染模板吗?

我正在使用Rocket,我正在尝试创建一个Layout结构。我已经实现serde::Serialize了,因为文档说静态方法Template::render的第二个参数接受一个实现的结构Serialize

我得到错误

我做错了什么?

0 投票
1 回答
228 浏览

rust - 函数局部变量的寿命不够长

我正在尝试围绕 serde_json 和 Rocket 编写一个包装器,FromData以强类型化我与服务器交换的一些 JSON。

我无法编译以下代码:

编译器的错误:

因为data_from_reader, valueand unwraped_valuecome fromdata我认为编译器可以推断出它具有相同的生命周期,但显然情况并非如此。有什么办法可以说明或做一些在这种情况下可行的事情吗?

serde_json::from_reader

rocket::data::Data::open

rocket::data::DataStream::take

0 投票
3 回答
12062 浏览

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?

0 投票
3 回答
2466 浏览

serialization - 如果有的话,如何在 Rust 中添加多态特征对象的反序列化?

我正在尝试解决序列化和反序列化的问题Box<SomeTrait>。我知道在封闭类型层次结构的情况下,推荐的方法是使用枚举并且它们的序列化没有问题,但在我的情况下使用枚举是一个不合适的解决方案。

起初我尝试使用 Serde,因为它是事实上的 Rust 序列化机制。Serde 能够序列化Box<X>,但不能在 whenX是一个特征的情况下。Serialize不能为 trait 对象实现 trait,因为它具有泛型方法。这个特殊问题可以通过使用擦除的serde来解决,这样序列化就Box<SomeTrait>可以工作了。

主要问题是反序列化。要反序列化多态类型,您需要在序列化数据中有一些类型标记。此标记应首先反序列化,然后用于动态获取将返回的函数Box<SomeTrait>

std::any::TypeId可以用作标记类型,但主要问题是如何动态获取反序列化函数。我不考虑为每个应在应用程序初始化期间手动调用的多态类型注册一个函数的选项。

我知道两种可能的方法:

  1. 像 C# 这样具有运行时反射的语言可以使用它来获取反序列化方法。
  2. 在 C++ 中,谷物库使用静态对象的魔法在库初始化时将反序列化器注册到静态映射中。

但是这些选项在 Rust 中都不可用。如果有的话,如何在 Rust 中添加多态对象的反序列化?

0 投票
1 回答
17330 浏览

json - 如何使用 Serde 反序列化带有自定义函数的可选字段?

我想chrono::NaiveDate用自定义函数对 a 进行序列化和反序列化,但 Serde 书并未涵盖此功能,代码文档也无济于事。

我知道这Option<chrono::NaiveDate>很容易被 Serde 反序列化,因为 Chrono 支持 Serde,我正在尝试学习 Serde,所以我想自己实现它。当我运行此代码时,出现错误:

0 投票
2 回答
1706 浏览

json - 如何使用 Serde 从原始结构的 JSON 反序列化结构的子字段?

我想让Test::team_size属性从Test对象本身的数据中反序列化:

这段代码无法编译,我不知道如何让 Serde 做我想做的事。在这个例子中,有没有办法team_size从作为子字段的原始结构的 JSON 反序列化?

似乎我想要 #[serde(untagged)]只是一个结构和一个字段而不是整个结构。

0 投票
3 回答
3683 浏览

rust - 如何区分缺失的反序列化字段和空字段?

我想使用Serde来解析一些 JSON 作为 HTTP PATCH 请求的一部分。由于 PATCH 请求不传递整个对象,仅传递要更新的相关数据,因此我需要能够区分未传递的值、显式设置为null的值和存在的值。

我有一个具有多个可为空字段的值对象:

如果客户端这样提交 JSON:

我想更改aSome(42)btoNonec保持不变。

我尝试将每个字段包装在一个以上级别Option

操场

这并没有区分bc; 两者都是,None但我本来想b成为Some(None)

我不依赖于嵌套Options 的这种表示;任何可以区分这 3 种情况的解决方案都可以,例如使用自定义枚举的解决方案。

0 投票
1 回答
9809 浏览

rust - 为什么一个特征没有为一个明确实现的类型实现?

我正在尝试使用Diesel查询 MySQL 数据库并使用带有Rocket的 Handlebars 模板显示结果。

我在models.rs中有这个

cargo run输出这个:

在我的 Cargo.toml 中,我有这个:

我读过 Diesel 目前不支持Serialize,但我不确定。

0 投票
3 回答
1347 浏览

rust - 如何使用 serde 和 bincode 映射一个填充超过 32 个字节的 C 结构?

我正在使用 serde 和 bincode 映射二进制结构。

事情按预期工作,但我无法映射保留字段。显然,固定大小的数组仅定义为最大 32 字节的大小。

如何注册我的自定义大小的数组,以便对填充进行反序列化?

serde+bincode 是正确的方法吗?我需要控制字节顺序(bincode 提供),我喜欢声明式风格。