Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在反序列化JSON.NET期间将ISO日期转换为双精度_C#_Json.net - Fatal编程技术网

C# 在反序列化JSON.NET期间将ISO日期转换为双精度

C# 在反序列化JSON.NET期间将ISO日期转换为双精度,c#,json.net,C#,Json.net,在使用JSON.NET的反序列化过程中,是否有一种方法可以将JSON中的ISO日期时间字符串自动转换为双倍值(例如历元秒) 假设我有一门课,如下所示 public class Announcement { public string Id { get; set; } public string Name {get; set;} public double CreatedDateTime {get;set;}

在使用JSON.NET的反序列化过程中,是否有一种方法可以将JSON中的ISO日期时间字符串自动转换为双倍值(例如历元秒)

假设我有一门课,如下所示

 public class Announcement
    {

            public string Id { get; set; }

            public string Name {get; set;}

            public double CreatedDateTime {get;set;}
    }
我希望以下JSON中的ISO datetime CreatedDateTimes自动转换为CreatedDateTimes

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

如果您有一个单独的属性来表示转换后的值,并使用ScriptIgnore属性对其进行修饰,以避免JSON数据中出现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中序列化为datetime。如果您希望将其序列化为秒,则只需移动该属性。

是的,有一种方法,编写一个自定义JsonConverter…为问题添加了更多详细信息和示例。Json.Net不支持[ScriptIgnore]属性。相反,您需要使用[JsonIgnore].new DateTime1970,1,1-MyDate??new DateTime1970,1,1-MyDate将返回一个时间跨度。为了保持简单并避免为每个调用更新DateTime结构,声明一些类似私有静态只读DateTime _epoch=new DateTime1970,1,1;在getter和setter中引用它。但我猜你指的是MyDate-new DateTime1970,1,1: