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



所以我很乐意使用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

我正在使用带有 MVC 的 JSON.NET 和以下设置:

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

关于如何处理这个问题的任何想法? 我不想失去setValuesForKeysWithDictionary的使用,因为它跳得太快了。

我假设您使用的是核心数据(因为核心数据会产生您发布的错误(,并且您的实体具有一个名为"BackOrderDate"的属性,类型为"Date"。

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

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

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

在调用 setValuesForKeysWithDictionary: 之前执行分析的方式取决于您使用的内容来分析 JSON。

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

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

相关内容

  • 没有找到相关文章

最新更新