C#将datetime转换为WCF datetime格式

C#将datetime转换为WCF datetime格式,c#,json,wcf,json.net,C#,Json,Wcf,Json.net,我用JsonNet解析具有DateTime属性的c#对象,然后将其发布到服务器。但是它返回的日期格式是错误的。它要求采用如下格式: "/Date(1327572000000-1000)/" 如何将c#DateTime转换为此格式?因为您询问了如何使用JSON.NET序列化此格式: // Set the DateFormatHandling wherever you are configuring JSON.Net. // This is usually globally configured

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

"/Date(1327572000000-1000)/"

如何将c#DateTime转换为此格式?

因为您询问了如何使用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中日期和时间的首选(事实上)格式


另请参见:。

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

公共静态字符串MsJson(日期时间值)
{
long unixEpochTicks=新的日期时间(1970,1,1,0,0,0,DateTimeKind.Utc);
长刻度=(value.ToUniversalTime().ticks-unixEpochTicks)/10000;
if(value.Kind==DateTimeKind.Utc)
{
返回String.Format(“/Date({0})/”,ticks);
}
其他的
{
TimeSpan ts=TimeZone.CurrentTimeZone.GetUtcOffset(value.ToLocalTime());
字符串符号=ts。记号<0?-“:“+”;
整数小时=数学绝对值(ts小时);
字符串hs=(小时数<10)
“0”小时以上
:hours.ToString(CultureInfo.InvariantCulture);
int分钟=数学绝对值(ts分钟);
字符串ms=(分钟<10)
?“0”+分钟
:minutes.ToString(CultureInfo.InvariantCulture);
返回string.Format(“/Date({0}{1}{2}{3})/”,ticks,sign,hs,ms);
}
}

请看@Arman C#和Javascript是不同的,我复制了错误的链接,对此表示歉意。“我是说这个。”阿尔曼说,这很有帮助。谢谢
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);
    }
}