在反序列化JSON.NET期间将ISO日期转换为double

时间:2014-09-30 17:55:08

标签: c# json.net

有没有办法在使用JSON.NET的反序列化过程中将JSON中的ISO日期时间字符串自动转换为double值(比如epoch秒)。

我们说我有一个类似下面的课程。

 public class Announcement
    {

            public string Id { get; set; }

            public string Name {get; set;}

            public double CreatedDateTime {get;set;}
    }

我希望以下JSON中的ISO datetime(createdDateTime)自动转换为CreatedDateTimeMS。

{"id": 123, "name": "new announcement", "createdDateTime": "2014-01-05T13:15:30Z"}

1 个答案:

答案 0 :(得分:2)

如果您有一个单独的属性来呈现转换后的值并使用ScriptIgnore属性对其进行修饰以使其远离JSON数据,那么使用JSON序列化程序可以减少对战。

public class MyClass
{
    private static readonly DateTime _epoch = new DateTime(1970, 1, 1);

    public DateTime MyDate { get; set; }

    [ScriptIgnore]
    public double EpochSeconds
    {
        get { return (MyDate - _epoch).TotalSeconds; }
        set { MyDate = _epoch.AddSeconds(value); }
    }
}

使用此方法,您可以使用MyDate或EpochSeconds来获取和设置值,但它始终会被序列化为JSON中的日期时间。如果您希望将其序列化为秒,则只需移动属性。