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 的核心是提供了一个 Encoder
和 Decoder
实现,以及围绕它移动的几个支持对象。 核心思想是这些实现将 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 版本 | 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 添加了许多功能,在必要时分离了编码和解码,并为 Meta(De|En)coder
提供了更好的覆盖选项。 但是,这导致了一个更封闭的环境,并非所有内容都可以覆盖,就像在版本 1 中一样。
版本 1 非常类似于 Foundations JSONEncoder 实现。 几乎所有内容都被声明为 open。
此框架以 Apache Version 2.0 许可证获得许可,(几乎)与 swift 获得许可的许可证相同。
非常感谢所有为该项目做出贡献的人!
主要贡献者和维护者