问题标签 [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 回答
1097 浏览

rust - 带有 serde 的项目无法编译

当我尝试从 serde 存储库运行示例时:

我收到一个错误:

错误:未能运行rustc以了解特定于目标的信息

原因:进程没有成功退出:(rustc - --crate-name _ --print=file-names --crate-type bin --crate-type proc-macro --crate-type rlib --target x86_64-unknown-linux-gnu退出代码:101)---stderr错误:未知的箱子类型:proc-macro

我的 Rust 版本是 1.13.0 并且我的 Cargo.toml 具有以下依赖项:

我应该使用其他依赖项还是额外的配置?

0 投票
1 回答
738 浏览

rust - 使用 serde 时如何“展平”向量以生成多个 XML 元素?

我有以下结构:

我需要生成如下所示的 XML:

如何使用 serde 序列化/反序列化为上述 XML 格式,特别是关于扁平化artists向量以生成多个artist元素?这是我无法更改的第三方格式:-(

0 投票
1 回答
2470 浏览

json - 如何使用 Serde 从 JSON 命名值而不是数组中(反)序列化元组结构?

我有一个 JSON 对象:

我想把它解析成这个元组结构:

当前的 Serde 序列化机制似乎没有提供从命名值而不是数组(反)序列化元组结构的功能。

生成的(反)序列化机制需要以下内容:

我尝试使用 Serde 属性,但找不到可以满足我要求的属性:

如何解析它?我应该自己实现一切吗?

在 Serde 存储库上打开了一个问题

0 投票
1 回答
815 浏览

rust - 序列化时跳过结构字段

给定结构:

如何确保 Serdestart在序列化时忽略该字段?

0 投票
3 回答
3085 浏览

serialization - 我如何反序列化为特征,而不是具体类型?

我正在尝试进行结构序列化,其中字节最终将通过管道发送,重构并在它们上调用方法。

我创建了一个特征,这些结构将根据需要实现,并且我使用 serde 和 serde-cbor 进行序列化:

当我尝试使用特征作为类型来重构字节时(假设我不知道正在发送哪个底层对象),编译器抱怨特征没有实现Sized特征:

我想这是有道理的,因为编译器不知道结构应该有多大,也不知道如何为它排列字节。如果我更改反序列化对象的行以指定实际的结构类型,它会起作用:

是否有更好的模式来实现这种序列化+多态行为?

0 投票
2 回答
11985 浏览

json - 使用 serde 生成漂亮的(缩进的)JSON

使用serde_json板条箱,我可以使用

将对象序列化为 JSON 字符串。生成的 JSON 使用紧凑格式,例如:

但是如何生成漂亮/缩进的 JSON?例如,我想得到这个:

0 投票
1 回答
5256 浏览

rust - 使用serde序列化时如何对HashMap键进行排序?

我正在HashMap用 serde 序列化一个,如下所示:

HashMap的键顺序未指定,并且由于散列是随机的(请参阅文档),因此键实际上最终会在相同运行之间以不同的顺序出现。

我希望我HashMap按排序(例如字母)键顺序进行序列化,以便序列化是确定性的。

我可以使用 aBTreeMap而不是 aHashMap来实现这一点,因为BTreeMap::keys()它按排序顺序返回它的键,但我不想仅仅为了适应序列化逻辑而更改我的数据结构。

如何告诉 serdeHashMap在序列化之前对键进行排序?

0 投票
2 回答
2905 浏览

rust - 创建返回实现 serde::Deserialize 的值的函数时的生命周期错误

我正在使用 serde 和 serde_json 1.0 来解码来自 base64 字符串的数据:

当我编译时,我得到了这个:

检查 serde 文档,Deserialize定义为:

所以我添加了生命周期:

然后编译器告诉我:

我只知道 Rust 生命周期的基础知识,所以我对'dein非常困惑trait Deserialize

如何修复此类函数中的生命周期错误?我每晚使用 Rust 1.18.0 (452bf0852 2017-04-19)

0 投票
0 回答
957 浏览

rust - 是否可以使用 Serde 在 Rust 中实现 ASN.1 DER?

AFAIK 在 Rust 中没有(灵活且稳定的)ASN.1 {ser,deser}ialization 库,所以我正在考虑制作一个(同时学习 Rust)。我的目标是在 Rust 中实现 SNMP (v1-v3) 客户端。

在从头开始之前,我想问问 Serde 团队或有经验的 Serde 用户是否可以使用 Serde 实现 ASN.1 编解码器。问题是 ASN.1 中的每个对象都有自己的标头 ( TAG+ LENGTH),其中TAG是用户为每种类型定义的,因此 iXX 或 uXX 或 bytes 或任何可以是 any TAG

ASN.1 对象由和tag组成。ASN.1 有一组用于整数、浮点数、字节串(以及 ASCII 字符串)等的通用(默认)标签。对于原始类型,我可以坚持使用通用标签,但对于非原始类型(元组、新类型、结构)等)该类型应该具有特征的实现,提供标签和自定义序列化/反序列化功能。lengthpayloadAsn1Info

{ser,deser}原始类型的序列化是微不足道的,但是我如何为复杂的结构(或新类型)实现它?他们一定Asn1Info

我查看了asn1-cereal库。它看起来像一个不错的 ASN.1 实现,提供了有用的宏和东西。我不妨继续努力,而不是从头开始编写所有内容。

假设tagu8并且 Asn1Info 特征看起来像这样:

然后我有一个新类型,就像pub struct Counter(u32)它自己的应用程序特定标签一样。然后我会像这样为 Counter 做一个 impl:

现在如何在0x41不手动实现Serialize特征的情况下使用标签对其进行序列化?无法向 中注入额外信息Serializer,因此我无法重用其中的所有非原始序列化方法(如serialize_newtype_variant)。如果我不能SerializerSerializetrait impl 中为自定义 ASN.1 对象(特定于应用程序、特定于上下文等)使用方法,那么就没有办法(或没有意义)使用 Serde 实现有用的 ASN.1 编解码器,不是是吗?

0 投票
1 回答
2008 浏览

rust - 如何使用启用 Futures 的 Hyper Chunk 的 Serde 零拷贝反序列化存储结果?

我正在使用 futures、tokio、hyper 和 serde_json 来请求和反序列化一些我需要保留到下一个请求之前的数据。我最初的想法是制作一个结构,其中包含hyper::Chunk从 中借用的 和反序列化数据Chunk,但无法获得正确的生命周期。我尝试使用出租箱,但我也无法让它工作。也许我'buffer在声明缓冲区之前使用了生命周期Vec,但也许我搞砸了其他东西:

有什么方法可以使生命周期正确,还是我应该使用DeserializeOwned并放弃零拷贝?

对于更多上下文,以下代码有效(定期从两个 URL 反序列化 JSON,保留结果,以便我们可以对它们都做一些事情)。我想更改我的XY类型以Cow<'a, str>用于他们的字段,从更改DeserializeOwnedDeserialize<'a>. 为此,我需要存储每个已反序列化的切片,但我不知道该怎么做。我正在寻找使用 Serde 的零拷贝反序列化并保留结果的示例,或者一些重组我的代码的想法。