1

所以我很高兴使用 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 的使用,因为它太快了。

4

1 回答 1

1

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

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

在将数据传递给setValuesForKeysWithDictionary:.

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

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

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

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

于 2012-08-06T21:47:31.697 回答