如何在C#中使用日期反序列化对象

时间:2016-06-16 14:09:58

标签: c# json

我有一个来自web api的Json:

jsonstring ={"users":[{"id":1123,"last_update":"2016-02-28 14:53:04"}],"page":1,"pages":1}

我希望在像这样的对象中反序列化:

public class Rootobject
{
    public User[] users { get; set; }
    public int page { get; set; }
    public int pages { get; set; }
}

public class User
{
    public int id { get; set; }
    public DateTime last_update { get; set; }
}

为此我使用:

 var obj= JsonConvert.DeserializeObject<Rootobject>(jsonString);

null的结果为last_update

jsonstring是来自WebClient.DownloadString(url)的字符串结果;看起来像上面的例子。

如何获取反序列化的日期?

编辑:

此帖Deserializing dates with dd/mm/yyyy format using Json.Net中没有一个解决方案可以帮我解决问题。

3 个答案:

答案 0 :(得分:3)

var obj = JsonConvert.DeserializeObject<Rootobject>(jsonString, 
            new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });

Fiddle

答案 1 :(得分:0)

将属性last_update更改为Nullable,然后它允许您将null文本分配给DateTime类型。它提供了另一层次的间接性。所以使用如下:

public DateTime? last_update { get; set; }

这是为了接受日期,即使它为null,您可以在反序列化JSON时指定日期格式。使用此Thread作为

答案 2 :(得分:-1)

"2016-02-28 14:53:04"不是有效的RFC3339日期时间,我认为它无法解析它。

必须是:

2016-02-28T14:53:04

另请注意,不能为null,因为DateTime是一个结构。要使其可为空,请创建允许空值的数据类型DateTime?