使用setValuesForKeysWithDictionary和JSON设置NSDate的问题

时间:2012-08-06 21:27:18

标签: 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的使用,因为它非常快速。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

如何在调用setValuesForKeysWithDictionary:之前执行解析取决于您使用解析JSON的内容。

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

如果你正在使用其他一些JSON解析器(比如SBJSON),我不知道更换的最佳方法。