推荐(并且是唯一经过测试的)安装和使用 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 😉