3

我从 Github遇到了一个关于Mantle 框架的问题。我想做以下

@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当我使用 JSON序列化一个实例时,[NSJSONSerialization dataWithJSONObject:[MTLJSONAdaptor JSONDictionaryFromModel:instanceOfA]我想获得以下 JSON 对象,其中 B 的选定属性嵌套在 JSON 键下user

{ user: {
           user_name: <value of class B's name property>
        }
}

我认为必须像 NSCoding 所做的那样沿着对象关系树走下去。我想知道这种行为是否已经实现,我只是不知道如何使用它,或者我是否必须自己编写代码。

除了自述文件之外,我也很难找到更多关于地幔框架的文档。

4

2 回答 2

1

我最终userJSONTransformer为classA添加了一个自定义:

+ (NSValueTransformer *)userJSONTransformer
{
    return [MTLValueTransformer reversibleTransformerWithBlock:^id(ClassB *b){
        return @{ @"user_name": b.name,
                };
    }];
}

现在生成了正确的嵌套数据结构。

于 2013-03-13T21:13:53.047 回答
0

您可以使用 NSValueTransformerreverseTransformedValue方法。

+ (NSValueTransformer *)userJSONTransformer
{
    return [MTLValueTransformer reversibleTransformerWithBlock:^id(ClassB *b){
        return [[NSValueTransformer mtl_JSONDictionaryTransformerWithModelClass:[ClassB class]] reverseTransformedValue:b]
    }];
}
于 2015-02-05T23:38:41.523 回答