1

我正在关注使用 .NET 解析 JSON 的官方示例

我创建了一个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)for 表示日期对象。

4

1 回答 1

4

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

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

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

于 2013-01-11T11:10:53.467 回答