关于json:C#将datetime转换为WCF日期时间格式

C# convert datetime to WCF datetime format

我用jsonnet解析具有datetime属性的c对象,然后将其发布到服务器。但它返回日期格式错误。它要求采用如下格式:

1
"/Date(1327572000000-1000)/"

如何将C日期时间转换为这种格式?


由于您询问了如何使用json.net序列化此格式:

1
2
3
4
5
6
7
8
9
// Set the DateFormatHandling wherever you are configuring JSON.Net.
// This is usually globally configured per application.
var settings = new JsonSerializerSettings
{
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
};

// When you serialize, DateTime and DateTimeOffset values will be in this format.
string json = JsonConvert.SerializeObject(yourDateTimeValue, settings);

但是,我强烈建议您不要使用这种格式,除非您必须使用这种格式,通常是为了与旧代码兼容。对于JSON中的日期和时间,ISO-8601格式是首选(事实上的)格式。

另请参见:关于JSON日期的噩梦。


这就是WCF基本上如何序列化日期时间值(请注意,非UTC值包括有关当前时区的信息)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static string MsJson(DateTime value)
{
    long unixEpochTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
    long ticks = (value.ToUniversalTime().Ticks - unixEpochTicks) / 10000;

    if (value.Kind == DateTimeKind.Utc)
    {
        return String.Format("/Date({0})/", ticks);
    }
    else
    {
        TimeSpan ts = TimeZone.CurrentTimeZone.GetUtcOffset(value.ToLocalTime());
        string sign = ts.Ticks < 0 ?"-" :"+";
        int hours = Math.Abs(ts.Hours);
        string hs = (hours < 10)
            ?"0" + hours
            : hours.ToString(CultureInfo.InvariantCulture);
        int minutes = Math.Abs(ts.Minutes);
        string ms = (minutes < 10)
            ?"0" + minutes
            : minutes.ToString(CultureInfo.InvariantCulture);
        return string.Format("/Date({0}{1}{2}{3})/", ticks, sign, hs, ms);
    }
}