我正在关注使用.NET解析JSON的official example。
我创建了一个products.json
文件:
{
"Name": "Apple",
"Expiry": new Date(1230422400000),
"Price": 3.99,
"Sizes": [
"Small",
"Medium",
"Large"
]
}
将其读入字符串然后反序列化。我试图按如下方式解析它:
Product deserializedProduct;
string jsonObj = File.ReadAllText(@"..\..\Content\products.json");
if (jsonObj != null)
{
try
{
deserializedProduct = JsonConvert.DeserializeObject<Product>(jsonObj);
}
catch (Exception e)
{
//log exception;
}
}
我得到以下异常:
Error reading date. Unexpected token: StartConstructor. Path 'Expiry', line 3, position 24.
我知道JSON不允许日期对象,但为什么该示例使用new Date(1230422400000)
来表示日期对象。
答案 0 :(得分:4)
您需要传入转换器。尝试这样的事情:
deserializedProduct = JsonConvert.DeserializeObject<Product>(jsonObj, new JavaScriptDateTimeConverter());
至于为什么,它可能是一个老例子,Json.NET在使用更正式的方式(IIRC)之前习惯使用旧的Date对象。但是,如果你告诉它如何处理它,它仍然可以序列化和反序列化。