问题标签 [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 的项目无法编译
当我尝试从 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 具有以下依赖项:
我应该使用其他依赖项还是额外的配置?
rust - 使用 serde 时如何“展平”向量以生成多个 XML 元素?
我有以下结构:
我需要生成如下所示的 XML:
如何使用 serde 序列化/反序列化为上述 XML 格式,特别是关于扁平化artists
向量以生成多个artist
元素?这是我无法更改的第三方格式:-(
json - 如何使用 Serde 从 JSON 命名值而不是数组中(反)序列化元组结构?
我有一个 JSON 对象:
我想把它解析成这个元组结构:
当前的 Serde 序列化机制似乎没有提供从命名值而不是数组(反)序列化元组结构的功能。
生成的(反)序列化机制需要以下内容:
我尝试使用 Serde 属性,但找不到可以满足我要求的属性:
如何解析它?我应该自己实现一切吗?
rust - 序列化时跳过结构字段
给定结构:
如何确保 Serdestart
在序列化时忽略该字段?
serialization - 我如何反序列化为特征,而不是具体类型?
我正在尝试进行结构序列化,其中字节最终将通过管道发送,重构并在它们上调用方法。
我创建了一个特征,这些结构将根据需要实现,并且我使用 serde 和 serde-cbor 进行序列化:
当我尝试使用特征作为类型来重构字节时(假设我不知道正在发送哪个底层对象),编译器抱怨特征没有实现Sized
特征:
我想这是有道理的,因为编译器不知道结构应该有多大,也不知道如何为它排列字节。如果我更改反序列化对象的行以指定实际的结构类型,它会起作用:
是否有更好的模式来实现这种序列化+多态行为?
rust - 使用serde序列化时如何对HashMap键进行排序?
我正在HashMap
用 serde 序列化一个,如下所示:
HashMap
的键顺序未指定,并且由于散列是随机的(请参阅文档),因此键实际上最终会在相同运行之间以不同的顺序出现。
我希望我HashMap
按排序(例如字母)键顺序进行序列化,以便序列化是确定性的。
我可以使用 aBTreeMap
而不是 aHashMap
来实现这一点,因为BTreeMap::keys()
它按排序顺序返回它的键,但我不想仅仅为了适应序列化逻辑而更改我的数据结构。
如何告诉 serdeHashMap
在序列化之前对键进行排序?
rust - 创建返回实现 serde::Deserialize 的值的函数时的生命周期错误
我正在使用 serde 和 serde_json 1.0 来解码来自 base64 字符串的数据:
当我编译时,我得到了这个:
检查 serde 文档,Deserialize
定义为:
所以我添加了生命周期:
然后编译器告诉我:
我只知道 Rust 生命周期的基础知识,所以我对'de
in非常困惑trait Deserialize
。
如何修复此类函数中的生命周期错误?我每晚使用 Rust 1.18.0 (452bf0852 2017-04-19)
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 字符串)等的通用(默认)标签。对于原始类型,我可以坚持使用通用标签,但对于非原始类型(元组、新类型、结构)等)该类型应该具有特征的实现,提供标签和自定义序列化/反序列化功能。length
payload
Asn1Info
{ser,deser}原始类型的序列化是微不足道的,但是我如何为复杂的结构(或新类型)实现它?他们一定是Asn1Info
。
我查看了asn1-cereal库。它看起来像一个不错的 ASN.1 实现,提供了有用的宏和东西。我不妨继续努力,而不是从头开始编写所有内容。
假设tag
是u8
并且 Asn1Info 特征看起来像这样:
然后我有一个新类型,就像pub struct Counter(u32)
它自己的应用程序特定标签一样。然后我会像这样为 Counter 做一个 impl:
现在如何在0x41
不手动实现Serialize
特征的情况下使用标签对其进行序列化?无法向 中注入额外信息Serializer
,因此我无法重用其中的所有非原始序列化方法(如serialize_newtype_variant
)。如果我不能Serializer
在Serialize
trait impl 中为自定义 ASN.1 对象(特定于应用程序、特定于上下文等)使用方法,那么就没有办法(或没有意义)使用 Serde 实现有用的 ASN.1 编解码器,不是是吗?
rust - 如何使用启用 Futures 的 Hyper Chunk 的 Serde 零拷贝反序列化存储结果?
我正在使用 futures、tokio、hyper 和 serde_json 来请求和反序列化一些我需要保留到下一个请求之前的数据。我最初的想法是制作一个结构,其中包含hyper::Chunk
从 中借用的 和反序列化数据Chunk
,但无法获得正确的生命周期。我尝试使用出租箱,但我也无法让它工作。也许我'buffer
在声明缓冲区之前使用了生命周期Vec
,但也许我搞砸了其他东西:
有什么方法可以使生命周期正确,还是我应该使用DeserializeOwned
并放弃零拷贝?
对于更多上下文,以下代码有效(定期从两个 URL 反序列化 JSON,保留结果,以便我们可以对它们都做一些事情)。我想更改我的X
和Y
类型以Cow<'a, str>
用于他们的字段,从更改DeserializeOwned
为Deserialize<'a>
. 为此,我需要存储每个已反序列化的切片,但我不知道该怎么做。我正在寻找使用 Serde 的零拷贝反序列化并保留结果的示例,或者一些重组我的代码的想法。