Трудно полностью ответить на ваш вопрос, не зная больше об объектах, которые вы пытаетесь сериализовать в JSON, но не сложно объяснить, какие объекты можно сериализовать (если вы используете TouchJSON).Если вы посмотрите на метод -isValidJSONObject
в CJSONSerializer.m , вы увидите, какие именно классы можно сериализовать:
- (BOOL)isValidJSONObject:(id)inObject
{
if ([inObject isKindOfClass:[NSNull class]]) { return(YES); }
else if ([inObject isKindOfClass:[NSNumber class]]) { return(YES); }
else if ([inObject isKindOfClass:[NSString class]]) { return(YES); }
else if ([inObject isKindOfClass:[NSArray class]]) { return(YES); }
else if ([inObject isKindOfClass:[NSDictionary class]]) { return(YES); }
else if ([inObject isKindOfClass:[NSData class]]) { return(YES); }
else if ([inObject respondsToSelector:@selector(JSONDataRepresentation)])
{
return(YES);
}
else
{
return(NO);
}
}
(код переформатирован для ясности.)
Итак, вы можете видеть, что NSNULL, NSNumber, NSString, NSArray, NSDictionary и NSData все сериализуемы в JSON, и что любой класс, реализующий -JSONDataRepresentation
, также сериализуем.
На основеошибка «Недопустимый тип для JSON», которую вы, очевидно, получаете, я предполагаю, что по крайней мере один из объектов на вашем графике не входит в число перечисленных выше, и вы, вероятно, захотите внедрить -JSONDataRepresentation
всоответствующий класс (ы).
Обновление: Из вашего комментария я вижу, что вы используете SBJSON вместо TouchJSON. Эта страница содержит список типов, поддерживаемых SBJSON.