C#将日期时间转换为WCF日期时间格式

3

我使用JsonNet解析了一个包含DateTime属性的c#对象,然后将其发送到服务器。但是返回的结果提示日期格式错误,要求格式如下:

"/Date(1327572000000-1000)/"

我该如何将c#的DateTime转换为这种格式?


请查看此答案 - Arman Peiravi
2
@Arman C#和Javascript是不同的。 - mister_giga
2
抱歉,我复制了错误的链接。我指的是这个链接https://dev59.com/dnbZa4cB1Zd3GeqPK-Cg#18821102。 - Arman Peiravi
@Arman,这真的帮了很多。谢谢。 - mister_giga
2个回答

5

既然您问如何使用JSON.NET以此格式进行序列化:

// 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);

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

另请参阅:有关JSON日期的噩梦


0

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

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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接