BSONSerialization

安装 & 兼容性

推荐(并且是唯一经过测试的)安装和使用 BSONSerialization 的方式是通过 SwiftPM,至少需要 Swift 5.1。

你的 Package.swift 文件的内容应该类似如下:

import PackageDescription

let package = Package(
	name: "MyAwesomePackage",
	dependencies: [.package(url: "https://github.com/Frizlab/BSONSerialization.git", from: "2.0.0")]
)

使用

BSONSerialization 拥有与 JSONSerialization 相同的基本接口。

使用示例

let myFirstBSONDoc = ["key": "value"]
let serializedBSONDoc = try BSONSerialization.data(withBSONObject: myFirstBSONDoc, options: [])
let unserializedBSONDoc = try BSONSerialization.bsonObject(with: serializedBSONDoc, options: [])
try areBSONDocEqual(myFirstBSONDoc, unserializedBSONDoc) /* Returns true */

也支持序列化/反序列化到/从流。(注意:由于 BSON 格式的规范,序列化到 Data 对象比序列化到流更快。)

最后,一个方法可以让你知道一个给定的字典是否可以被序列化为 BSON 文档。

替代方案

首先,说一下这个项目的理念。大多数 BSON 框架创建一个全新的类型来表示 BSON 文档。这对于向文档添加新元素并且始终准备好文档序列化非常有用。

本项目采取不同的方法。它仅仅是将序列化的 BSON 数据转换为实际的 Foundation 或原生对象,反之亦然。它实际上就像 Foundation 的 JSONSerialization,后者是将 Foundation 对象转换为序列化的 JSON 数据。

如果你更喜欢拥有一个实际的 BSON 对象,你可以向其中添加元素,而不是稍后序列化的标准 Foundation 对象,我推荐这个项目:https://github.com/OpenKitten/BSON

参考

我使用了 BSON 规范版本 1.1,来自 http://bsonspec.org/spec.html

本规范中的所有类型,包括已弃用的类型,均受支持。

待办事项

  • ❏ 允许直接序列化 Data 对象,而不必使用 MongoBinary 类型

  • ❏ 允许将 Int64 或 Int32 直接序列化为 Int,具体取决于平台

  • ❏ iOS Framework 的 Xcode 目标

如果这个项目得到足够的关注,我会认真地进行开发。欢迎提出问题,我会尽力回答。

欢迎提交 Pull Request 😉

许可

MIT (参见 License.txt 文件)