2016-06-23 9 views
0

Ich möchte Mantle verwenden, um einige Objekte zu diesem JSON zu serialisiert:Mantle Objective C: Abbilden verschachtelten Eigenschaften zu JSON

{ 
"name": "John Smith", 
"age": 30, 
"department_id":123 
} 

Ich habe zwei Klassen Abteilung Mitarbeiter:

#import <Mantle/Mantle.h> 

    @interface Department : MTLModel <MTLJSONSerializing> 

    @property(nonatomic)int id; 
    @property(nonatomic)NSString *name; 

    @end 

und die Klasse Employee :

#import <Mantle/Mantle.h> 
#import "Department.h" 

    @interface Employee : MTLModel <MTLJSONSerializing> 

    @property(nonatomic)NSString *name; 
    @property(nonatomic)int age; 
    @property(nonatomic)Department *department; 

    @end 

@implementation Employee 
+ (NSDictionary *)JSONKeyPathsByPropertyKey { 

    return @{ 
      @"name":@"name", 
      @"age":@"age", 
      @"department.id":@"department_id" 
      }; 
} 
@end 

Beim Serialisieren einer Employee-Instanz erhalte ich die folgende Ausnahme : "NSInternalInconsistencyException", "department.id ist keine Eigenschaft von Employee."

Was ist hier falsch? Gibt es eine Möglichkeit, das Objekt als einzelnes Wörterbuch zu serialisieren, anstatt das Abteilungsobjekt in das Mitarbeiterobjekt zu verschachteln?

Antwort

0

OK, ich habe es von hier: Mantle property class based on another property?

ich das Mapping-Wörterbuch wie dieses

+ (NSDictionary *)JSONKeyPathsByPropertyKey { 

    return @{ 
      @"name":@"name", 
      @"age":@"age", 
      NSStringFromSelector(@selector(department)) : @[@"department_id"] 
      }; 
} 

und hinzugefügt werden geändert:

+ (NSValueTransformer *)departmentJSONTransformer { 
     return [MTLValueTransformer transformerUsingReversibleBlock:^id(Department *department, BOOL *success, NSError *__autoreleasing *error) { 
      return [MTLJSONAdapter JSONDictionaryFromModel:department error:nil]; 
     }]; 

} 
0

zuerst entfernen Sie diesen Code aus Ihrer Employee.m Datei

@implementation Employee 
+ (NSDictionary *)JSONKeyPathsByPropertyKey { 

    return @{ 
      @"name":@"name", 
      @"age":@"age", 
      @"department.id":@"department_id" 
      }; 
} 

und dann die folgenden Befehle verwenden, wenn Sie die Employee Objekt serialize wollen

Employee *objEmployee = [Employee instanceFromDict:responseObject]; 

Ich hoffe, es wird für Sie arbeiten. Alles Gute!!

+0

Danke, aber ich möchte serialisiert Das Mitarbeiterobjekt möchte ich in ein JSON-Wörterbuch konvertieren. nicht anders herum (Serialisierung/Parsing) –

+0

"http://stackoverflow.com/questions/6368867/generate-json-string-from-nsdictionary-in-ios" .... überprüfen Sie diesen Link !! –

+0

Danke, aber ich frage nach der Implementierung dieser mit Mantle-Bibliothek. –

Verwandte Themen