问题标签 [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 - 如何序列化或反序列化 Arc在塞尔德?
我有一个包含自己类型的孩子的结构。这些孩子被包裹在Arc
s 中,我在调用serde_json::to_string
它时遇到了问题。我的结构是:
这会产生错误the trait 'serde::Serialize' is not implemented for 'std::sync::Arc<db::queries::categories::Category>'
,我尝试了几种不同的方法来使序列化工作,例如:
这无济于事,因为我遇到了同样的错误。我也试过:
但这给出了错误impl doesn't use types inside crate
我可能没有反序列化就可以生活,因为在这一点上序列化更重要。
rust - 向枚举结构变体添加展平时“找不到值 __collect”
我有以下代码:
这给了我一个编译器错误:
如果我将代码更改为此,它编译得很好:
我不明白编译器错误或为什么它不应该工作。Serde 是否不支持枚举结构变体中的字段属性?
rust - 如何为某些输入类型而不是全部自定义反序列化实现?
我有一个这样的类型,虽然我的实际类型更大更复杂:
如果我Deserialize
为这种类型实现,serde 会寻找这样的东西(我对 JSON 感兴趣):
我想自定义它,以便我也可以从字节数组反序列化:
我可以编写一个 impl 来处理数组,但我希望 serde 自动生成其余部分(将是visit_map
):
那可能吗?在这个例子中,这并不难,但是当结构体很大时,手写反序列化可能会很痛苦。
这不是如何在使用 Serde 反序列化期间转换字段的副本?因为deserialize_with
仅适用于 1 个字段。我无法理解如何让它适用于我的真实类型:
我想做的是:
- 反序列化时,如果输入是数字,则返回 a
Component::String
。这可以与visit_i
//u
和f64
朋友一起完成。 - 如果输入是字符串,则
Component::String
再次返回 a。这可以用visit_str
/来完成string
。 - 如果输入是一个数组
[..]
,像往常一样反序列化它,但是将数组[1..]中的元素分配给数组[0]的额外元素。这可以通过visit_seq
. - 如果输入是一个地图,让 serde 派生处理它。
generics - 如何创建可以使用 Serde 序列化并保留类型信息的通用结构?
我想使用 Serde 序列化一个通用的数据结构。
我的图书馆的用户应该能够提供他们自己的结构来实现Serialize
和Deserialize
. 我应该能够取回他们序列化数据所用值的原始类型信息。
我该怎么做呢?
我尝试过这样的事情:
V
我想在反序列化数据后取回类型。
这是这样做的方式还是我偏离了轨道?
我希望用户能够扩展可能的值/类型。我想要枚举的行为,但用户可以灵活地添加自己的结构作为可能的候选者。与此代码类似,但它们都需要唯一的ids。
enums - 如何配置 Serde 以使用枚举变体的判别式而不是名称?
我正在解析一个使用整数作为枚举数的 INI 样式文件。
在文件中,值将像这样被序列化:
但是,默认情况下,Serde 匹配变体名称而不是判别式。自定义实现Deserialize
是最干净的方法吗?
rust - 无法使用 Serde 反序列化:`?` 运算符只能在返回 `Result` 的函数中使用
我正在尝试将 json 字符串反序列化为结构,但无法使其正常工作。我要做的就是打印出第一个与run["meta"]["username"]
给定用户名匹配的状态和/或结果。
然而,尽管遵循了给定的例子,我似乎无法让它工作。现在我宁愿用无类型的值来做这件事,因为我不打算存储这些值但是当我这样做时我不能轻易地迭代初始数组,这样做runs.as_array().iter()
似乎返回一个包含整个 jsonVec
的单个元素String
字符串,因此需要添加类型,但现在这也不起作用。
我得到的当前问题是:
这是没有意义的,因为如果你删除?
它然后抱怨runs
期待 aRuns
而不是收到 a Result
,所以我很困惑,它怎么能抱怨它正在返回 aResult
然后抱怨它正在返回 a ()
?
显然我错过了一些东西,我只是没有看到它。
第二个问题是我不能使用.iter()
:
我知道它是一个包装的 Vec,但它不应该自动委托或其他东西吗?因为我不能使用类型别名或只是这样做:
因为我需要:
#[派生(调试,序列化,反序列化)]
在它之前允许它与 serde-rs 一起工作。
那么如何解决这两个问题,让我可以从 json 中获取我需要的数据?
这是一个最小的(生锈)示例:
generics - 函数上的 Rust 泛型
我正在重构一些 Rust 代码(见下文)以使用serde
crate 解析各种配置文件(在 JSON 中)。
因此我有 2 个结构:CfgFileWebServer
&CfgFileFtpServer
实现Serialize
&Deserialize
特征。
对于这两个结构,我都有单独的解析函数。由于解析代码几乎相同,我想使用泛型重写它以获得:
但是我不知道如何使反序列化变量p
( serde_json::from_str
) 通用。我试过以下:
我应该传递给特征的生命周期是多少?
这是没有泛型的当前实现:
json - 如何(反)序列化 Serde 中的强类型 JSON 字典?
我正在编写一个 Rust 应用程序,它处理来自具有公共接口的 TypeScript 客户端的 JSON 消息。我已经使用serde_derive
它编写了一些代码并且效果很好,但是我不知道如何实现字典;例如:
这里的键是字符串"foo"
,"bar"
字典的值遵循这个模式:
我希望以这种方式访问 JSON 数据:
Dictionary
如何使用 Serde将我的 JSON 数据(反)序列化到/从序列化?
rust - Clap 无法解析 YAML 文件:无法将 YAML 字符串(“1”)值转换为字符串
我使用 YAML 文件来定义我的命令行界面。我使用 Clap 的宏解析文件load_yaml!
,这在一段时间内运行良好:
如果我不对相关代码进行任何更改,这将停止工作,并且我收到以下错误:
我不确定更新是否应归咎于此。我更新了 Rust 并删除了 Cargo.lock 以排除不兼容问题,但这并没有帮助。
这是我的 YAML 文件的最小版本,它会产生错误:
这是一个已知的问题?这里出了什么问题?除了尝试旧版本的 Clap 和 YAML 板条箱的组合之外,我还能做些什么吗?
版本信息
摘自 Cargo.toml
摘自 Cargo.lock
rust - 在泛型结构上派生反序列化时无法解析 T: serde::Deserialize<'a>
我正在尝试编写一个派生的结构,serde::Deserialize
但它也有一个应该派生的字段serde::Deserialize
:
我已经更改了一段时间的代码,但我无法编译这个想法。我目前遇到的错误是: