我使用JsonNet解析具有DateTime属性的c#对象,然后将其发布到服务器。但它返回日期格式错误。它要求使用这样的格式:
"/Date(1327572000000-1000)/"
如何将c#DateTime转换为此格式?
答案 0 :(得分:4)
因为您询问了如何使用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中日期和时间的首选(事实上)格式。
答案 1 :(得分: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);
}
}