Objective-C Mantle,反序列化 JSON 字典
Posted
技术标签:
【中文标题】Objective-C Mantle,反序列化 JSON 字典【英文标题】:Objective-C Mantle, deserializing JSON Dictionary 【发布时间】:2017-03-16 22:47:02 【问题描述】:我试图弄清楚如何反序列化包含不是完整对象的“字典”的对象。
例如,在我们的应用程序中,我们有一堆 JSON 对象,我们通过 Mantle 从 JSON 反序列化。一个简单的模型可能如下所示:
@interface Artist : MTLModel<MTLJSONSerializing>
@property (nonatomic, strong, nonnull) NSString *name;
@property (nonatomic, strong, nullable) NSURL *image;
@end
在一个集合类中,我们可能有这样的东西:
@interface SomeCollection : MTLModel<MTLJSONSerializing>
@property (nonatomic, strong, nonnull) NSString *title;
@property (nonatomic, strong, nonnull) NSArray<Artist *> *listOfArtists;
@end
并且关联的.m
将具有:
+ (NSValueTransformer *)listOfArtistsJSONTransformer
return [MTLJSONAdapter arrayTransformerWithModelClass:[Artist class]];
这里一切都很好。
例如,如果 JSON 看起来像:
"title": "my collection with an array",
"listOfArtists": [
"name": "Some Artist",
"image": "http://www.google.com"
,
"name": "Another Artist",
"image": "http://www.artists.com"
,
"name": "Jane Painter",
"image": "http://www.jpainter.com"
,
]
对象按我们喜欢的方式反序列化(其中listOfArtists
属性包含Artist *
的数组。
但是,如果我们有一个不同的集合,我正在尝试找出咒语:
@interface SomeOtherCollection : MTLModel<MTLJSONSerializing>
@property (nonatomic, strong, nonnull) NSString *title;
@property (nonatomic, strong, nonnull) NSDictionary<NSString *, Artist *> *dictionaryOfArtists;
@end
还有一个可能看起来像这样的 JSON 文件
"title": "my collection with a dictionary",
"dictionaryOfArtists":
"139380bf-29ef-4cfc-95af-aa00f78f15f6":
"name": "Some Artist",
"image": "http://www.google.com"
,
"4cdbc728-13e7-49c8-b45e-32ff0650ca67":
"name": "Another Artist",
"image": "http://www.artists.com"
,
"2f2ec6f9-3af1-4789-b5de-399e14902ea8":
"name": "Jane Painter",
"image": "http://www.jpainter.com"
,
listOfArtistsJSONTransformer
方法会是什么样子?
谢谢。
【问题讨论】:
【参考方案1】:我对 Mantle 了解不多(什么),但看起来你可以使用...
+ (NSValueTransformer *)assigneeJSONTransformer
return [MTLJSONAdapter dictionaryTransformerWithModelClass:[Artist class]];
【讨论】:
不幸的是,我无法让dictionaryTransformerWithModelClass
工作。该调用通常用于从 JSON 字典创建单个对象,而不是创建具有“随机”(特定类型)键和值的字典。以上是关于Objective-C Mantle,反序列化 JSON 字典的主要内容,如果未能解决你的问题,请参考以下文章
将 Objective-C 对象序列化和反序列化为 JSON