wcf与具有GMT偏移的DateTime的XML序列化不一致

时间:2012-03-22 21:16:34

标签: xml wcf serialization

我正在使用第三方服务来序列化包含日期时间的对象。某些类中的某些DateTime属性序列化为具有偏移量的字符串,如:

2012-03-22T15:31:18 -05:00

某些类中的某些DateTime属性序列化为没有偏移量的字符串,如:

2012-03-24T00:00:00

我认为该服务期待日期时间偏移。 有什么方法可以强制类序列化日期时间偏移量吗?

1 个答案:

答案 0 :(得分:1)

一些带有GMT偏移量的DateTime序列和一些与DateTime的 Kind属性无关的原因

使用DateTime.Now()创建的DateTimes将其Kind属性设置为DateTimeKind.Local 使用DateTime.Parse()创建的DateTimes将其Kind属性设置为DateTimeKind.Unspecified

ToString(“o”)函数可用于序列化为GMT格式。未指定的种类不知道偏移量,因此它被跳过。

未指明种类:2012-03-24T00:00:00 当地种类:2012-03-22T15:31:18 -05:00

有一个名为SpecifyKind的函数,但仅当 NOT 的类型设置为未指定时才有效。

解决方案是使用以下构造函数创建DateTime: DateTime(年,月,日,小时,分钟,秒,DateTimeKind.Local);

http://msdn.microsoft.com/en-us/library/t882fzc6.aspx

我为此创建了一个简短的扩展方法:

    public static DateTime SpecifyKindLocal(this DateTime datetime)
    {
        return new DateTime(datetime.Year, datetime.Month, datetime.Day, datetime.Hour, datetime.Minute, datetime.Second, DateTimeKind.Local);
    }

我希望它可以帮助别人