C# 通过WCF REST在Azure DB中保留DateTimeOffset值
我正在努力解决我认为应该很简单的问题,我在azure DB中有一个数据库表,其中有一列名为“CreatedOn”,数据库中该列的数据类型为“DateTimeOffset” 我的时区是IST(+5:30),我试图通过使用JsonSerializer的RESTful WCF服务使用实体框架填充此表中的值 问题是,当我通过windows phone应用程序进行服务调用时,数据库中没有偏移值 该属性声明如下C# 通过WCF REST在Azure DB中保留DateTimeOffset值,c#,wcf,entity-framework,datetimeoffset,C#,Wcf,Entity Framework,Datetimeoffset,我正在努力解决我认为应该很简单的问题,我在azure DB中有一个数据库表,其中有一列名为“CreatedOn”,数据库中该列的数据类型为“DateTimeOffset” 我的时区是IST(+5:30),我试图通过使用JsonSerializer的RESTful WCF服务使用实体框架填充此表中的值 问题是,当我通过windows phone应用程序进行服务调用时,数据库中没有偏移值 该属性声明如下 /// <summary> /// Gets or sets the cre
/// <summary>
/// Gets or sets the created on.
/// </summary>
[DataMember]
public DateTimeOffset? CreatedOn
{
get
{
return DateTime.Now;
}
set
{
this.OnPropertyChanged("CreatedOn");
}
}
在填充对象时,我尝试了以下所有方法
tableItem.CreatedOn = DateTime.Now;
tableItem.CreatedOn = DateTime.UtcNow;
tableItem.CreatedOn = DateTime.SpecifyKind(DateTime.Now,DateTimeKind.Utc)
没有任何效果,我得到的结果如下图所示。偏移量始终为00:00,显示正确值的偏移量是在不使用azure WCF的情况下添加的
图像url是这是用于实现
CreatedOn
方法的psueducode:
- 当有人询问值时,只需给他们本地时区的当前日期和时间
- 当有人给我一个值时,忽略它并通知订阅的任何人该属性已更改
[KnownType]
属性DateTimeOffset
是一种本机类型,实体框架应该很好地理解可为null的类型
因此,您真正需要的是:
[DataMember]
public DateTimeOffset? CreatedOn {get; set;}
如果您需要INPC,那么您可以将其扩展到:
private DateTimeOffet? _createdOn;
[DataMember]
public DateTimeOffset? CreatedOn
{
get
{
return _createdOn;
}
set
{
_createdOn = value;
this.OnPropertyChanged("CreatedOn");
}
}
在填充对象时,只需使用:
tableItem.CreatedOn = DateTimeOffset.Now;
现在,您应该能够正确地保留给定的任何值。但是,您可能需要对序列化进行更深入的研究。如果以/Date(123456789123)/
等格式传递它们,则会删除所有偏移量信息。您可以使用带有偏移量的/Date(123456789123+0530)/
,但它仍然是一种非标准格式。您真正想要传递的是一个ISO8601扩展格式字符串,如2013-08-11T01:23:45+05:30
。您可以通过使用序列化程序而不是当前的序列化程序来实现这一点
tableItem.CreatedOn = DateTimeOffset.Now;