MetaSerialization

Carthage compatible

MetaSerialization 是一个框架,旨在简化为 Swift 标准库环境(Encodable, Decodable, Codable 等)创建新的序列化库。 您是否已经有代码将(嵌套的)字典或基本类型数组(String、Int 等)转换为您的最终格式(例如,JSON、YAML、XML)? 那么,只需一行代码即可添加对任意 Codable Swift 类型的支持

let serialization = SimpleSerialization<YOUR FORMAT>(encodeFromMeta: YOUR ENCODING FUNCTION, decodeToMeta: YOUR DECONDING FUNCTION)
serialization.encode(anythingCodable)  // done :)

BasicUsage playground 中包含一个更完整的示例。MetaSerialization 的核心是提供了一个 EncoderDecoder 实现,以及围绕它移动的几个支持对象。 核心思想是这些实现将 Swift 对象转换为格式(中间格式)。 在上面的例子中,这是嵌套的 Dictionary/Array。 该过程的每个部分都经过高度定制,因此 MetaSerialization 还可以支持更高级的用例(例如,不同的元格式,带有锚点的格式)。

您可以在此示例文件夹中找到更多示例(用于单元测试)。 此外,https://github.com/cherrywoods/meta-serialization-examples 提供了两个扩展示例。

安装

使用以下依赖管理器之一安装 MetaSerialization

文档

请参阅源代码中嵌入的文档字符串以获取 API 文档。 有关安装 MetaSerialization 和开始使用该框架的帮助,请访问:https://github.com/cherrywoods/swift-meta-serialization/tree/master/docs/Guides。 这些文档可能会留下一些未解答的问题。 请在讨论页面上提问:https://github.com/cherrywoods/swift-meta-serialization/discussions

欢迎提出问题和拉取请求! 只需确保您遵守行为准则

限制

如果您没有在 Encodable 协议的实现中直接使用函数 encode(to: ),MetaSerialization 才能正常工作。 请改用 (Un)Keyed/SingleValueEncodingContainers 的 encode 方法。

维护状态

我将此项目作为全职工作之外的爱好来维护。 我将在一两天内回复问题/问题/拉取请求,但解决问题可能需要更多时间。

版本

Swift 版本

Swift 版本 MetaSerialization 版本
5.2 2.3
5.1 2.2
4.2 2.1.0
4.1.2 2.0.1
4.1 2.0
4.0 1.0

2.3

版本 2.3 增加了一个可选功能,用于保持键控容器中的插入顺序,修复了测试并更新了文档。

2.0

版本 2 添加了许多功能,在必要时分离了编码和解码,并为 Meta(De|En)coder 提供了更好的覆盖选项。 但是,这导致了一个更封闭的环境,并非所有内容都可以覆盖,就像在版本 1 中一样。

1.0

版本 1 非常类似于 Foundations JSONEncoder 实现。 几乎所有内容都被声明为 open。

许可

此框架以 Apache Version 2.0 许可证获得许可,(几乎)与 swift 获得许可的许可证相同。

贡献者

非常感谢所有为该项目做出贡献的人!

主要贡献者和维护者