C# 在反序列化JSON.NET期间将ISO日期转换为双精度
在使用JSON.NET的反序列化过程中,是否有一种方法可以将JSON中的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;}
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: