将对象序列化为 JSON
Posted
技术标签:
【中文标题】将对象序列化为 JSON【英文标题】:Serializing an object to JSON 【发布时间】:2013-01-14 19:46:50 【问题描述】:我是 JSON 格式的新手,但它看起来非常适合我正在尝试的内容。我需要使用自定义 NSObject
(食谱)并通过电子邮件中的 URL 字符串发送。然后收件人将在我的应用程序中打开链接并解析 URL。
我现有的实现从配方的详细信息手动构建一个字符串,并在另一端对其进行解码。我更喜欢使用更标准的东西,比如 JSON。
到目前为止,我已将以下方法添加到我的 Recipe
类中:
- (NSData *)jsonRepresentation
NSDictionary *dictionary = @@"name":self.name,
@"instructions":self.instructions;
NSError* error;
return [NSJSONSerialization dataWithJSONObject:dictionary
options:NSJSONWritingPrettyPrinted
error:&error];
我可以使用以下方法成功记录 NSData
对象:
[[NSString alloc]initWithData:recipe.jsonRepresentation
encoding:NSUTF8StringEncoding];
但是,我还不能添加我的成分列表(NSArray
)。我试图简单地使用它:
NSDictionary *dictionary = @ @"name" : self.name,
@"instructions" : self.instructions,
@"ingredients" : self.orderedIngredients ;
但在登录时,我收到此错误:
Invalid type in JSON write (Ingredient)
如你所知,我在这方面还很陌生。
在将ingredients
数组添加到字典之前,我是否打算对它做一些事情?
【问题讨论】:
注意:我没有使用任何第三方框架,并且暂时不想使用,直到我知道自己在做什么。 什么是成分对象?在添加到当前字典之前,您应该在该类中编写一个方法以返回一个 NSDictionary 左右。 成分是具有一些属性的自定义对象。我在这里唯一关心的是名字。 如果名字就是你想要的,请检查我的答案。 【参考方案1】:试试这个:
NSDictionary *dictionary = @ @"name" : self.name,
@"instructions" : self.instructions,
@"ingredients" : [self.orderedIngredients valueForKey:@"name"] ;
假设self.orderedIngredients
是一个包含ingredients
对象的数组,并且ingredients
有一个名为name
的属性,
[self.orderedIngredients valueForKey:@"name"]
将返回一个包含所有名称的数组。
【讨论】:
谢谢。非常简洁。我只希望 XCode 可以让它看起来一样漂亮。【参考方案2】:如果您的成分列表包含自定义类对象,您应该为该类创建一个序列化程序。
【讨论】:
好的 - 我不清楚我会怎么做,但我看到了区别。我可以改用一组成分名称吗? @user1111278,+1。如果我们必须将ingredients
的所有属性转换为 JSON,我同意 serializer
部分。以上是关于将对象序列化为 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用 Json.net 将 JSON 对象反序列化为动态对象