问题标签 [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 投票
0 回答
749 浏览

rust - 如何使用 Serde 进行类型-长度-值 (TLV) 序列化?

我需要使用Serde根据TLV 格式序列化一类结构。TLV 可以嵌套在树格式中。

这些结构的字段通常是序列化的,很像bincode,但在字段数据之前,我必须包含一个标签(理想情况下是关联的)和字段数据的长度(以字节为单位)。

理想情况下,Serde 会识别需要这种序列化的结构,可能是通过让它们实现一个TLV特征。这部分是可选的,因为我也可以显式地注释每个结构。

因此,这个问题按优先级分为 3 个部分:

  1. 在执行数据序列化之前,如何获取长度数据(来自 Serde?)?

  2. 如何将标签与结构相关联(尽管我想我也可以在结构中包含标签..)?

  3. 如何让 Serde 识别一类结构并应用自定义序列化?

请注意,1) 是这里的(核心)问题。如果 1) 可以用 Serde 解决,我会将 2) 和 3) 作为单独的问题发布。

0 投票
1 回答
580 浏览

rust - 将 JSON 数组反序列化为元组并为其赋予类型标签

我的 JSON 看起来像:

数组中的对象当然有其他字段range,但这没关系。

是否可以将它们反序列化为具有两种幻像类型的元组,以自动指示开始和结束是包含还是不包含?

这也可以通过将数字反序列化为某种具有幻像类型的元组来解决。

这不起作用,因为serde_json似乎对 size 数组一无所知PhantomData并期望数组4,这可以通过Deserializer手动实现来解决,这正是我想要避免的事情。

我没有寄予厚望,但也许这可以做到,我不知道。

0 投票
4 回答
1729 浏览

serialization - 我们如何编写一个通用函数来检查 Serde 序列化和反序列化?

在一个涉及自定义 Serde (1.0) 序列化和反序列化方法的项目中,我依靠这个测试例程来检查序列化对象并返回是否会产生等效对象。

这样做内联效果很好。我迈向可重用性的下一步是check_serde为此目的创建一个函数。

这适用于拥有类型,但不适用于具有生命周期边界的类型(Playground):

错误:

由于我希望使函数适用于这些情况(包括带有字符串切片的结构),我尝试了一个具有显式对象反序列化生命周期的新版本:

此实现导致另一个问题,它不会编译(Playground)。

我已经预料到了这一点:这个版本意味着序列化的内容(以及反序列化的对象)与输入对象一样长,这是不正确的。缓冲区只意味着与函数的作用域一样长。

我的第三次尝试试图构建原始输入的自有版本,从而避免了具有不同生命周期边界的反序列化对象的问题。该ToOwned特征似乎适合此用例。

这使得该函数现在适用于纯字符串切片,但不适用于包含它们的复合对象(Playground):

同样,我们偶然发现了与第一个版本相同的错误类型:

诚然,我不知所措。我们如何构建一个通用函数,使用 Serde 序列化一个对象并将其反序列化回一个新对象?特别是,这个功能可以在 Rust(稳定或夜间)中实现吗?如果可以,我的实现缺少哪些调整?

0 投票
1 回答
786 浏览

xml - 无法使用带有 serde-xml-rs 的可选元素解析 XML

我有一个带有 serde 注释的结构树,它成功地解析了示例 XML,包括这个片段:

现在我正在使用一个大型示例 XML 文件进行测试,并且以下结构失败,因为有时<cmsg>..</cmsg>会丢失。我正在使用以下方法反序列化:

这导致了第二个结构中的错误:

我将第一个结构更改为具有 aVec<>以便它可以处理可选元素:

但是 serde 继续给出同样的错误。我也试过Option<>,但没有成功。

最让我困惑的是,我到处使用Vec<>,从来没有遇到过这个问题。

0 投票
1 回答
1269 浏览

rust - 当类型仅为序列化时,使用 serde 将类型的名称作为 String

我需要一个返回类型名称的函数,我有这个使用 serde 工作的函数,但现在我需要一个不需要类型的替代版本,Deserialize以便我可以在具有借用成员的结构上使用它。

我怎样才能重写这个函数,以便它在类型为时工作Serialize,但不是Deserialize

这是一个游乐场链接。

0 投票
0 回答
51 浏览

serialization - 如何使用 serde 反序列化 XML 文件中的可选字段?

我正在尝试反序列化具有包含嵌套元素的元素的 XML 文件,如下所示:

nested2不是强制性的,在某些情况下不存在。发生这种情况时,serde 会引发错误。有没有办法标记nested2为可选?

0 投票
1 回答
9513 浏览

rust - 如何使用 Serde 在反序列化期间转换字段?

我正在使用 Serde 反序列化具有十六进制值0x400作为字符串的 XML 文件,我需要将其转换1024u32.

我是否需要实现Visitor特征以便分离 0x 然后将 400 从基数 16 解码到基数 10?如果是这样,我该怎么做才能使以 10 为底的整数的反序列化保持不变?

0 投票
1 回答
3185 浏览

rust - 如何更改 Serde 的默认实现以返回空对象而不是 null?

我正在开发一个 API 包装器,但在反序列化空 JSON 对象时遇到了一些麻烦。

API 返回此 JSON 对象。注意空对象entities

这是我等效的message属性结构(已编辑):

Serde 的默认设置是反序列化Options,即None, 和::serde_json::Value::Null.

0 投票
1 回答
204 浏览

rust - 如果变量的值为空,则跳过其序列化?(自定义序列化)

Token如果变量的值为空,我想跳过变量的序列化。

0 投票
3 回答
2837 浏览

json - 如何将两个 JSON 对象与 Rust 合并?

我有两个 JSON 文件:

JSON 1

JSON 2

我想将#2 合并到#1 中,其中#2 覆盖#1,产生以下输出:

我检查了执行此操作的 crate json-patch,但它不能针对稳定的 Rust 进行编译。是否可以使用serde_json和 stable Rust之类的东西做类似的事情?