奇怪的是,似乎没有任何公共方法可以序列化数组,但它显然可以在序列化数组属性时做到这一点。我有一个带有数组属性的 JSONModel 继承类。我想获得该属性的 JSON 文本表示,而不是整个对象。
我不介意修改源代码,但如果能提前知道在哪里看,将不胜感激。
另一个想法是将每个对象单独序列化为 JSON 并将它们包装在[
,中]
。
奇怪的是,似乎没有任何公共方法可以序列化数组,但它显然可以在序列化数组属性时做到这一点。我有一个带有数组属性的 JSONModel 继承类。我想获得该属性的 JSON 文本表示,而不是整个对象。
我不介意修改源代码,但如果能提前知道在哪里看,将不胜感激。
另一个想法是将每个对象单独序列化为 JSON 并将它们包装在[
,中]
。
解释:
JSONModel 模型表示一个 JSON 对象——它将 JSON 键与模型类的属性相匹配。这就是为什么对于示例,您不能直接创建与顶部对象是数组的 JSON 提要匹配的 JSONModel 类。例如:
[obj1、obj2、obj3 等...]
没有与属性匹配的键。
现在你要问的是同样的情况,但相反。您不能将 NSArray 导出为 JSON,因为没有 JSONModel 可以处理它。如果您有一个具有一个属性的模型,即 NSArray - 那么这很容易。该属性将映射到 1 个 JSON 键,并且 NSArray 内容将作为其内容导出。
解决方案:
如果你有一个包含 JSONModel 实例的 NSArray,你应该使用下面的方法:
NSArray* jsonObjects = [YourModelClass arrayOfDictionariesFromModels: modelObjects];
上面的行将注意正确地将模型类导出到字典,然后您可以使用NSJSONSerialization将 jsonObjects 导出到 JSON 。
这是该方法的文档:
http://www.jsonmodel.com/docs/Classes/JSONModel.html#//api/name/arrayOfDictionariesFromModels:
它最终实际上很容易实现自己。很奇怪,这不仅包含在库中:
@implementation NSArray (JSONModelExtensions)
- (NSString*)toJSONString {
NSMutableArray* jsonObjects = [NSMutableArray new];
for ( id obj in self )
[jsonObjects addObject:[obj toJSONString]];
return [NSString stringWithFormat:@"[%@]", [jsonObjects componentsJoinedByString:@","]];
}
@end
序列化(对象到 json 文本):
NSArray* jsonString = [YourObject arrayOfDictionariesFromModels: yourobjectsArray];
如果您不想要警告,则必须将 NSArray 类型赋予 jsonString ,但它将是一个简单的 JSON,因此它也可以是 NSString 。
反序列化:(json文本回对象):
NSArray* objectsAgain = [YourObject arrayOfModelsFromDictionaries: jsonString];
请注意,给出的 jsonString 与我们在序列化时得到的相同。