测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | Apache 2 |
发布上次发布 | 2017年1月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Josh Gretz 维护。
一个用 Swift 编写的轻量级序列化框架。支持 JSON 到对象的转换。
主要由 Josh Gretz 为 Truefit 编写。您可以通过查看 iOS Conf 来了解示例项目。
Cereal 使用标准的 NSJsonSerialization 类来解析 json。Cereal 带来的优势是能够与您的对象一起工作,而不是集合。
因此
该框架的目的是消除手动操作字符串名和数据解析的重复代码。
$ git submodule add https://github.com/jgretz/Cereal.git
Swift 在反射(坦白说,它甚至还没开始)方面还未跟上 Objective-C。因此,为了施行“魔法”,我们需要依赖 NSObject 提供的反射方法。因此,任何希望使用 Cereal 进行序列化或反序列化的对象都必须继承自 NSObject。
var foo = Foo()
foo.bar = "Hello World"
let serializer:JsonCerealizer = JsonCerealizer.object()
let json = serializer.toString(foo)
var json = "{\"bar\":\"Hello World\"}"
let serializer:JsonCerealizer = JsonCerealizer.object()
let foo = serializer.create(Foo.self, json) as! Foo
默认情况下,Cereal 会检查属性的类型,如果该属性是 NSObject 类型,它将会递归地对其进行反序列化。这个逻辑的唯一例外就是数组(如下文复杂情况部分所述)。Cereal 还使用 CoreMeta 创建对象,因此如果容器已配置,您的对象也将经过 IOC / DI。
通常,某个 API 对其字段的命名并不符合您的命名规范(例如,C# API 使用 Pascal 案,但 Swift 喜欢使用 Camel 案)。转换功能允许您提供这种映射的逻辑。它可以是简单的更改大小写,也可以是基于逻辑的映射。
以下提供了两种内置转换
默认情况下,Cerealizer 将使用 CaseInsensitive 转换。
日期格式化是开发人员的噩梦之一。C#、Java、Rails、Node 等,各不相同。为了帮助您序列化和反序列化日期,Cerealizer 提供了一个 NSDateFormatter 属性,您可以设置正确的格式以适应您的具体情况。
默认情况下,Cerealizer 将使用格式 "yyy-MM-dd HH:mm:ss"。
该框架还提供了两种其他常见日期格式化程序
Cereal 为您提供了两个协议,您的类可以实施以处理更加复杂的情况。实施这些协议将赋予您对过程的细粒度控制。
当您想控制一个对象的序列化时,请实现此协议。它需要三个方法
func shouldSerializeProperty(propertyName: String) -> Bool
func overrideSerializeProperty(propertyName: String) -> Bool
func serializeProperty(propertyName: String) -> AnyObject?
当您想控制一个对象的反序列化时,请实现此协议。它需要四个方法
func typeFor(propertyName: String, value: AnyObject?) -> AnyClass?
func shouldDeserializeProperty(propertyName: String) -> Bool
func overrideDeserializeProperty(propertyName: String, value: AnyObject?) -> Bool
func deserializeProperty(propertyName: String, value: AnyObject?)
此方法可能是需要解释的方法之一。该方法的目的在于处理数组的情况。由于内省(introspection)的工作方式,我们无法获取数组中对象的类型。该方法的目的在于供您为每个实例返回类型。
我最初用 Objective-C 写了这个框架。这个版本仍然可以在 v1-objc 分支中找到。多年来使用过程中,我的团队在一些情况下需要支持 XML,所以我们添加了 XmlCerealizer。由于我们一段时间内没有需求,我选择不在当前时刻移植它。
如果您需要这个功能,请随时联系或甚至提交一个 PR :)
版权所有 2011 TrueFit Solutions
根据 Apache 许可证第 2 版(“许可证”);您不得使用此文件,除非遵守许可证条款。您可以在以下位置获取许可证的副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律或书面同意,否则根据本许可证分发软件是以“现状”为基础分发的,不提供任何形式的明示或默示保证或条件。请参阅许可证以了解规定许可和限制的特定语言。