2

奇怪的是,似乎没有任何公共方法可以序列化数组,但它显然可以在序列化数组属性时做到这一点。我有一个带有数组属性的 JSONModel 继承类。我想获得该属性的 JSON 文本表示,而不是整个对象。

我不介意修改源代码,但如果能提前知道在哪里看,将不胜感激。

另一个想法是将每个对象单独序列化为 JSON 并将它们包装在[,中]

4

3 回答 3

6

解释:

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:

于 2013-09-19T19:00:49.713 回答
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
于 2013-08-13T22:01:39.323 回答
1

序列化(对象到 json 文本):

NSArray* jsonString = [YourObject arrayOfDictionariesFromModels: yourobjectsArray];

如果您不想要警告,则必须将 NSArray 类型赋予 jsonString ,但它将是一个简单的 JSON,因此它也可以是 NSString 。

反序列化:(json文本回对象):

NSArray* objectsAgain = [YourObject arrayOfModelsFromDictionaries: jsonString];

请注意,给出的 jsonString 与我们在序列化时得到的相同。

于 2015-07-14T19:03:00.243 回答