2013-08-13 3 views
2

Как ни странно, нет никакого публичного метода сериализации массива, но он, очевидно, может это сделать при сериализации массива property. У меня есть унаследованный JSONModel класс с свойством array. Я хочу получить текстовое представление JSON только этого свойства, а не весь объект.Как сериализовать NSArray для JSON с использованием JSONModel

Я не возражаю против того, чтобы изменить источник, но будет начат начальный план, где искать.

Другая мысль состоит в сериализации каждого объекта отдельно для JSON и обертывания их в [, ].

+0

Что такое JSONModel? Вы используете NSJSONSerialization? –

+1

www.jsonmodel.com – devios1

+2

Разве это?https://github.com/icanzilb/JSONModel –

ответ

6

Объяснение:

JSONModel модель представляет собой объект JSON - это соответствует ключам JSON к свойствам модели класса. Вот почему для примеров вы не можете напрямую создать класс JSONModel, который соответствует каналу JSON, чей верхний объект является массивом. Например:

[obj1, obj2, obj3 и т.д ...]

Там просто нет ключа, чтобы соответствовать свойству.

Теперь, о чем вы спрашиваете, такая же ситуация, но наоборот. Вы не можете экспортировать NSArray в JSON, потому что JSONModel не может позаботиться об этом. Если у вас есть модель с одним свойством NSArray, то это легко. Свойство будет сопоставлено с 1 ключом JSON, а содержимое NSArray будет экспортировано в качестве его содержимого.

Решение:

Если у Вас есть NSArray, содержащие экземпляры JSONModel, вы должны использовать следующий метод:

NSArray* jsonObjects = [YourModelClass arrayOfDictionariesFromModels: modelObjects]; 

Линия выше будет заботиться, чтобы правильно экспортировать классы модели в словарях, то вы можете экспортировать jsonObjects в JSON, используя NSJSONSerialization.

Вот документы метода в:

http://www.jsonmodel.com/docs/Classes/JSONModel.html#//api/name/arrayOfDictionariesFromModels:

+0

какой-либо полный пример того, как это использовать? – MobileMon

4

Это оказалось очень легко реализовать. Очень странно, что это не просто включено в библиотеке, хотя:

@implementation NSArray (JSONModelExtensions) 

- (NSString*)toJSONString { 
    NSMutableArray* jsonObjects = [NSMutableArray new]; 
    for (id obj in self) 
     [jsonObjects addObject:[obj toJSONString]]; 
    return [NSString stringWithFormat:@"[%@]", [jsonObjects componentsJoinedByString:@","]]; 
} 

@end 
+0

как я могу это использовать? – MobileMon

+0

где вставить этот код? – MobileMon

+0

@MobileMon Это реализация категории в 'NSArray' под названием NSArray + JSONModelExtensions.m. Вам также понадобится соответствующий NSArray + JSONModelExtensions.h и #import .h в любых файлах, которые хотят использовать этот метод (или импортировать его в предварительно скомпилированный заголовок вашего проекта, чтобы он был доступен в любом месте проекта). Цели исследования Цель-С для большего. – devios1

1

сериализации (объекты в JSon текст):

NSArray* jsonString = [YourObject arrayOfDictionariesFromModels: yourobjectsArray]; 

Если и не хотите, предупреждение и есть, чтобы дать тип NSArray для jsonString но это будет быть простым JSON, так что это может быть и NSString.

Десериализация: (JSON текст обратно к объектам):

NSArray* objectsAgain = [YourObject arrayOfModelsFromDictionaries: jsonString]; 

Обратите внимание, что jsonString дано одно и то же, что мы получили в сериализации.

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