ClassMapper
是一个简单的 obj-c 库,用于将遵循键值编码 (KVC) 约定的类转换为其他对象。按照惯例,这些对象是 Foundation
对象,如 NSDictionary
和 NSArray
。它是高度可扩展的,只包含足够的 batteries 来完成平均的 JSON -> Model 转换。它受到了 RestKit 的启发,包含了类似的功能。但 RestKit 显然更多是在框架方面,而 ClassMapper 希望与其它库一起使用。它是你可能会自己编写的代码片段,但现在我们都可以分享一个版本。
用 Stuart Sierra 的话来说:编写库,而不是框架。
ClassMapper 有两个主要方法,序列化和反序列化。序列化相对简单
+ (id)serialize:(id<Serializable>)obj;
// e.g.
Foo *foo = [Foo new];
foo.aString = @"Woohoo";
[ClassMapper serialize:foo]; //NSDictionary, {"aString":"Woohoo"}
当然,没有反序列化能力,这就不好玩了
+ (id)deserialize:(id<Mappable>)serialized toInstance:(id)instance;
// e.g.
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"Woohoo" forKey:@"aString"];
Foo *foo = [Foo new];
foo.aString = @"NOOOOOO!!!";
[ClassMapper deserialize:dict toInstance:foo]; //Foo.aString == @"Woohoo";
为了方便,您也可以允许 ClassMapper 为您创建对象
+ (id)deserialize:(id<Mappable>)serialized toClass:(Class)classType;
想了解更多关于这些命令的信息,请访问 wiki。
MapperConfig 单例允许您修改序列化/反序列化过程的一部分。
请查看 wiki 中的 MapperConfig 选项。
ClassMapper 正式支持 CocoaPods。您可以在仓库中找到我们的 spec。
您还可以手动添加 ClassMapper,无论是作为源代码还是(最好是)静态库。请注意两点:
我已经在多个项目中使用过 ClassMapper,并且相当满意。我们还需要添加一些支持的功能,但如果 ClassMapper 满足您的当前需求,我不认为 API 会发生重大变化,您不需要在您的代码中进行大的修改。
虽然我们没有 100% 的测试覆盖率,但是这个库经过了广泛的测试。测试/代码比值通常在 1:1 左右,通常更加倾向于测试。
有关更多信息,您可以在 ClassMapper.org 文件(emacs org-mode)中查看。
BSD协议,尽善尽美。详情请参阅LICENSE文件。