我遇到了来自Github的Mantle framework的问题。我想做以下
@interface ClassA : MTLModel <MTLJSONSerializing>
@property(strong, non-atomic) ClassB *instanceOfB;
@end
@implementation ClassA
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return [super.JSONKeyPathsByPropertyKey mtl_dictionaryByAddingEntriesFromDictionary:@{
@"instanceOfB": @"user"
}];
}
@interface ClassB : MTLModel <MTLJSONSerializing>
@property(strong, non-atomic) NSString *name;
@end
@implementation ClassB
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return [super.JSONKeyPathsByPropertyKey mtl_dictionaryByAddingEntriesFromDictionary:@{
@"name": @"user_name"
}];
}
编辑
当我使用ClassA
将[NSJSONSerialization dataWithJSONObject:[MTLJSONAdaptor JSONDictionaryFromModel:instanceOfA]
的实例序列化为JSON时,我希望获得以下JSON对象,其中选定的B属性嵌套在JSON密钥user
下:
{ user: {
user_name: <value of class B's name property>
}
}
我认为必须走下与NSCoding类似的对象关系树。我想知道这种行为是否已经实现,我只是无法弄清楚如何使用它,或者我是否必须自己编写代码。
除了自述文件之外,我也无法找到更多关于地幔框架的文档。
答案 0 :(得分:1)
我最终向classA添加了自定义userJSONTransformer
:
+ (NSValueTransformer *)userJSONTransformer
{
return [MTLValueTransformer reversibleTransformerWithBlock:^id(ClassB *b){
return @{ @"user_name": b.name,
};
}];
}
现在生成了正确的嵌套数据结构。
答案 1 :(得分:0)
您可以使用NSValueTransformer reverseTransformedValue
方法。
+ (NSValueTransformer *)userJSONTransformer
{
return [MTLValueTransformer reversibleTransformerWithBlock:^id(ClassB *b){
return [[NSValueTransformer mtl_JSONDictionaryTransformerWithModelClass:[ClassB class]] reverseTransformedValue:b]
}];
}