问题标签 [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 进行类型-长度-值 (TLV) 序列化?
我需要使用Serde根据TLV 格式序列化一类结构。TLV 可以嵌套在树格式中。
这些结构的字段通常是序列化的,很像bincode
,但在字段数据之前,我必须包含一个标签(理想情况下是关联的)和字段数据的长度(以字节为单位)。
理想情况下,Serde 会识别需要这种序列化的结构,可能是通过让它们实现一个TLV
特征。这部分是可选的,因为我也可以显式地注释每个结构。
因此,这个问题按优先级分为 3 个部分:
在执行数据序列化之前,如何获取长度数据(来自 Serde?)?
如何将标签与结构相关联(尽管我想我也可以在结构中包含标签..)?
如何让 Serde 识别一类结构并应用自定义序列化?
请注意,1) 是这里的(核心)问题。如果 1) 可以用 Serde 解决,我会将 2) 和 3) 作为单独的问题发布。
rust - 将 JSON 数组反序列化为元组并为其赋予类型标签
我的 JSON 看起来像:
数组中的对象当然有其他字段range
,但这没关系。
是否可以将它们反序列化为具有两种幻像类型的元组,以自动指示开始和结束是包含还是不包含?
这也可以通过将数字反序列化为某种具有幻像类型的元组来解决。
这不起作用,因为serde_json
似乎对 size 数组一无所知PhantomData
并期望数组4
,这可以通过Deserializer
手动实现来解决,这正是我想要避免的事情。
我没有寄予厚望,但也许这可以做到,我不知道。
serialization - 我们如何编写一个通用函数来检查 Serde 序列化和反序列化?
在一个涉及自定义 Serde (1.0) 序列化和反序列化方法的项目中,我依靠这个测试例程来检查序列化对象并返回是否会产生等效对象。
这样做内联效果很好。我迈向可重用性的下一步是check_serde
为此目的创建一个函数。
这适用于拥有类型,但不适用于具有生命周期边界的类型(Playground):
错误:
由于我希望使函数适用于这些情况(包括带有字符串切片的结构),我尝试了一个具有显式对象反序列化生命周期的新版本:
此实现导致另一个问题,它不会编译(Playground)。
我已经预料到了这一点:这个版本意味着序列化的内容(以及反序列化的对象)与输入对象一样长,这是不正确的。缓冲区只意味着与函数的作用域一样长。
我的第三次尝试试图构建原始输入的自有版本,从而避免了具有不同生命周期边界的反序列化对象的问题。该ToOwned
特征似乎适合此用例。
这使得该函数现在适用于纯字符串切片,但不适用于包含它们的复合对象(Playground):
同样,我们偶然发现了与第一个版本相同的错误类型:
诚然,我不知所措。我们如何构建一个通用函数,使用 Serde 序列化一个对象并将其反序列化回一个新对象?特别是,这个功能可以在 Rust(稳定或夜间)中实现吗?如果可以,我的实现缺少哪些调整?
xml - 无法使用带有 serde-xml-rs 的可选元素解析 XML
我有一个带有 serde 注释的结构树,它成功地解析了示例 XML,包括这个片段:
现在我正在使用一个大型示例 XML 文件进行测试,并且以下结构失败,因为有时<cmsg>..</cmsg>
会丢失。我正在使用以下方法反序列化:
这导致了第二个结构中的错误:
我将第一个结构更改为具有 aVec<>
以便它可以处理可选元素:
但是 serde 继续给出同样的错误。我也试过Option<>
,但没有成功。
最让我困惑的是,我到处使用Vec<>
,从来没有遇到过这个问题。
rust - 当类型仅为序列化时,使用 serde 将类型的名称作为 String
我需要一个返回类型名称的函数,我有这个使用 serde 工作的函数,但现在我需要一个不需要类型的替代版本,Deserialize
以便我可以在具有借用成员的结构上使用它。
我怎样才能重写这个函数,以便它在类型为时工作Serialize
,但不是Deserialize
?
serialization - 如何使用 serde 反序列化 XML 文件中的可选字段?
我正在尝试反序列化具有包含嵌套元素的元素的 XML 文件,如下所示:
但nested2
不是强制性的,在某些情况下不存在。发生这种情况时,serde 会引发错误。有没有办法标记nested2
为可选?
rust - 如何使用 Serde 在反序列化期间转换字段?
我正在使用 Serde 反序列化具有十六进制值0x400
作为字符串的 XML 文件,我需要将其转换1024
为u32
.
我是否需要实现Visitor
特征以便分离 0x 然后将 400 从基数 16 解码到基数 10?如果是这样,我该怎么做才能使以 10 为底的整数的反序列化保持不变?
rust - 如何更改 Serde 的默认实现以返回空对象而不是 null?
我正在开发一个 API 包装器,但在反序列化空 JSON 对象时遇到了一些麻烦。
API 返回此 JSON 对象。注意空对象entities
:
这是我等效的message
属性结构(已编辑):
Serde 的默认设置是反序列化Option
s,即None
, 和::serde_json::Value::Null
.
rust - 如果变量的值为空,则跳过其序列化?(自定义序列化)
Token
如果变量的值为空,我想跳过变量的序列化。
json - 如何将两个 JSON 对象与 Rust 合并?
我有两个 JSON 文件:
JSON 1
JSON 2
我想将#2 合并到#1 中,其中#2 覆盖#1,产生以下输出:
我检查了执行此操作的 crate json-patch,但它不能针对稳定的 Rust 进行编译。是否可以使用serde_json和 stable Rust之类的东西做类似的事情?