我有一个类型化的XML列,其中我使用DateTime属性存储C#对象的序列化。当我将它存储在数据库中时,该DateTime是本地类型 - 尽管序列化的XML显示了与GT时间偏移的时间,如 '2009-09-22T13:52:32.2346252-07:00'(我住在俄勒冈州)。 当我读取表(来自SQL Management Studio)时,XML以UTC类型显示DateTime对象。 有没有办法控制这种行为?对我来说,尊重我输入的数据的时区非常重要,因为它可能来自不同的来源,当我把它拉出来时,我需要尊重它。 在从DB读取对象后,我也不想将每个日期时间字段从UTC转换为本地。
这是我存储的对象的C#定义:
[Serializable]
[XmlType(Namespace="urn://MySchema")]
public class MyObject
{
public DateTime RecordTime { get; set; }
// .. omitted for clarity
}
这是表格的定义(为简洁起见而简化)
CREATE TABLE MyTable(
[ID] [int] IDENTITY(1,1) NOT NULL,
[MyKey] [int] NULL,
[TheObject] [xml](CONTENT [dbo].[MySchema]) NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
这就是我的sproc的样子(也简化了)
ALTER PROCEDURE [dbo].[SaveMyObjects]
@where int,
@object xml
AS
BEGIN
INSERT INTO MyTable
(MyKey, TheObject)
VALUES(@where, @object)
END
我需要做两件事:
我该怎么做?任何想法,指针,链接到一些上帝的博客显示我的错误等...将非常感激。
答案 0 :(得分:1)
不是最干净的方法,但你可以这样做:
[Serializable]
[XmlType(Namespace="urn://MySchema")]
public class MyObject
{
[XmlIgnore]
public DateTime RecordTime { get; set; }
//property for serialization purposes
[XmlElement(ElementName="RecordTime")]
public string XmlRecordTime
{
get { return this.RecordTime.ToString("o"); }
set { this.RecordTime = new DateTime.Parse(value); }
}
}
另外,看看XmlAttributeOverrides课程 - 更多工作,但更清洁。
答案 1 :(得分:0)
是否可以选择使用DateTimeOffset而不是DateTime?