2013-03-11 65 views
3

我從Github獲得了有關Mantle framework的問題。我想做以下將MTLModel子類的嵌套數據結構序列化爲JSON

@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" 
      }]; 
} 

編輯

當我使用[NSJSONSerialization dataWithJSONObject:[MTLJSONAdaptor JSONDictionaryFromModel:instanceOfA]我想獲得以下JSON對象和JSON項下嵌套B的選擇特性序列化的ClassA一個實例JSON user

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

我覺得一個人必須要走下去類似於NSCoding確實對象關係的樹。我想知道,如果這種行爲已經實施,我只是不知道如何使用它,或者如果我必須自己編寫它。

我也很難找到更多有關地幔框架除了自述文件之外的文檔。

回答

1

我結束了添加自定義userJSONTransformer到CLASSA:

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

現在會生成正確嵌套的數據結構。

+1

爲什麼你不接受你的答案,如果它適合你? – akashivskyy 2013-08-15 19:21:49

0

您可以使用NSValueTransformer reverseTransformedValue方法。

+ (NSValueTransformer *)userJSONTransformer 
{ 
    return [MTLValueTransformer reversibleTransformerWithBlock:^id(ClassB *b){ 
     return [[NSValueTransformer mtl_JSONDictionaryTransformerWithModelClass:[ClassB class]] reverseTransformedValue:b] 
    }]; 
}