2016-06-23 4 views
0

Я хочу использовать Mantle сериализовать некоторые объекты этой JSON:Мантия Objective C: отображение вложенных свойств JSON

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

У меня есть два класса Отдел сотрудников:

#import <Mantle/Mantle.h> 

    @interface Department : MTLModel <MTLJSONSerializing> 

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

    @end 

и класс 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 

при сериализации экземпляра Employee Я получаю следующее исключение : «NSInternalInconsistencyException», «department.id не является свойством Employee» ».

Что здесь не так? есть ли способ сериализации объекта как одного словаря вместо того, чтобы вставлять объект отдела внутри объекта employee?

ответ

0

ОК, я получил его отсюда: Mantle property class based on another property?

Я изменил словарь отображения, чтобы быть, как это

+ (NSDictionary *)JSONKeyPathsByPropertyKey { 

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

и добавил:

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

} 
0

сначала удалить этот код из файла Employee.m

@implementation Employee 
+ (NSDictionary *)JSONKeyPathsByPropertyKey { 

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

, а затем использовать следующий, когда вы хотите serializeEmployee объект

Employee *objEmployee = [Employee instanceFromDict:responseObject]; 

Я надеюсь, что это будет работать для вас. Всего наилучшего!!

+0

Спасибо, но я хочу, чтобы сериализации объект employee, я хочу преобразовать его в словарь JSON. не по-другому (сериализация/синтаксический анализ) –

+0

«http://stackoverflow.com/questions/6368867/generate-json-string-from-nsdictionary-in-ios» .... проверьте эту ссылку !! –

+0

Спасибо, но я прошу об этом, используя библиотеку Мантии. –

Смежные вопросы