这方面已经有很多问题了,但给出的答案是针对具体情况的,回答的是发帖人的个人问题,而不是问题的标题。
我想知道是否有一种通用的、通用的、简单的方法可以将 an 转换NSString
为 an NSDictionary
,反之亦然?
我有困难/复杂/非跨平台的方法,但肯定有更简单的方法吗?
这是我知道/测试过的:
- Apple 提供了一个没有逆向的
Dictionary
->String
方法,只要您的 Dictionary 只是基本的数据类型、数组和字典,它就可以完美地工作。这涵盖了大多数现实世界的情况,但苹果没有给出相反的情况:(。[myDictionary description];
- // 无路可返 ?为什么不?
- Apple 有一种中间方法使用
NSData
它静默失败,因此它仅适用于有限的一组实际案例:[myString dataUsingEncoding:NSUTF8StringEncoding];
[[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
// 注意:在很多情况下会静默失败,返回 nil 字符串
- Apple有多种不兼容的转换方式
NSDictionary
->NSData
->NSDicitonary
效果很好-但它们正在使用NSData
,因此它们不是直接转换,并且更难使用- KeyedArchiver:
[NSKeyedArchiver archivedDataWithRootObject:myDictionary];
[NSKeyedUnarchiver unarchiveObjectWithData:myData];
- 属性列表序列化:
[NSPropertyListSerialization dataFromPropertyList:plist format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
[NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
- NSJSON序列化:
[NSJSONSerialization JSONObjectWithData:myData options:0 error:nil];
[dataWithJSONObject:myDictionary options:0 error:nil];
- KeyedArchiver:
就目前而言,保证工作的唯一途径似乎是:
编写大量代码以输出详细的XML
or JSON
,将其转换为,NSData
然后再转换回NSString
,并将其发送到网络上。
其他任何事情的成功率都略低于 100%。不幸的是,这种技术将一个非常常见的问题(字符串 -> 字典 -> 字符串)变成了我们不应该编写的多行愚蠢的样板代码块。
此外...... XML
- 或 -JSON
方法是唯一正确报告故障(如果发生)的方法 - 两种编码系统都采用NSError
指针。