ios - 使用 setValuesForKeysWithDictionary 和 JSON 设置 NSDate 时出现问题

标签 ios json json.net

所以我很高兴地使用 JSON 和 setValuesForKeysWithDictionary 将数据猛击到我的系统中,直到我遇到一个具有 NSDate 属性的对象。

JSON 包含以下格式的日期:

BackOrderDate: "2011-03-15T00:00:00"

这给了我一个错误:

'NSInvalidArgumentException', reason: 'Unacceptable type of value for attribute: property = "BackOrderDate"; desired type = NSDate; given type = __NSCFString; value = 2011-03-15T00:00:00

我将 JSON.NET 与 MVC 一起使用,并对其进行了以下设置:

JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new Newtonsoft.Json.Converters.IsoDateTimeConverter());
string json = JsonConvert.SerializeObject(objects, Formatting.None, serializerSettings);
return Content(json);

关于如何处理这个问题有什么想法吗?我不想失去 setValuesForKeysWithDictionary 的使用,因为它太他妈快了。

最佳答案

我假设您正在使用 Core Data(因为 Core Data 会产生您发布的错误)并且您的实体有一个名为“BackOrderDate”且类型为“Date”的属性。

问题是 JSON 没有“日期”数据类型。在您的 .NET 代码中,您已通过告知 JSON 序列化将日期转换为 IS 格式的字符串来处理此问题。

在将数据传递给 setValuesForKeysWithDictionary: 之前,您需要在 iOS 应用中解析 JSON 数据时执行相反的转换。

您可以使用 NSDateFormatter 将字符串解析为 NSDate,您可以轻松地在网络上找到很多这样的示例。

在调用 setValuesForKeysWithDictionary: 之前执行解析的方式取决于您使用什么来解析 JSON。

如果您正在使用 Apple 的 NSJSONSerialization,您可能应该使用 NSJSONReadingMutableContainers 选项。然后进入字典并在调用 setValuesForKeysWithDictionary: 之前用 NSDate 对象替换日期字符串。

如果您使用其他一些 JSON 解析器(如 SBJSON),我不知道进行替换的最佳方法。

关于ios - 使用 setValuesForKeysWithDictionary 和 JSON 设置 NSDate 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836205/

相关文章:

c# - 当字段名包含空格时反序列化 JSON

android - 在 Ionic 框架中构建启动画面动画?

objective-c - 对于跨时间范围的获取等,SQLite 会比 Core Data 更受青睐吗?

ios - 将 NSPredicate 添加到 Core Data 获取请求

ios - 需要帮助使用 AVAudioPlayer iOS 从 URL 流式传输音频

.net - Json.NET - 如何使用自定义解析器序列化类

android - 如何处理 JSON 负载的解密

python - 如何使用 Python 按名称引用 json 数组元素?

php - Zend_JSON :Encode messing up - why?

c# - JSON 计数只返回 1 而不是 2