使用Json.NET时出现意外的令牌错误

时间:2013-01-11 11:07:25

标签: c# json.net

我正在关注使用.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)来表示日期对象。

1 个答案:

答案 0 :(得分:4)

您需要传入转换器。尝试这样的事情:

deserializedProduct = JsonConvert.DeserializeObject<Product>(jsonObj, new JavaScriptDateTimeConverter());

至于为什么,它可能是一个老例子,Json.NET在使用更正式的方式(IIRC)之前习惯使用旧的Date对象。但是,如果你告诉它如何处理它,它仍然可以序列化和反序列化。