仍在为 JSON.net 日期格式而苦苦挣扎



我在将日期(字符串格式)传输到我们的对象时遇到问题,因为序列化程序似乎一直转换错误。

该格式实际上是dd.MM.yyyy(瑞士时间格式),序列化程序尝试将其转换为MM-dd-YYYY(其中天数将转换为月)。

因此,如果我有一个像 06.03.1992(3 月 6 日)这样的日期,转换器会将其设为 6 月 3 日。 如果当天高于 12,程序将完全崩溃。

我知道我可以以某种方式指定日期格式,但我还没有真正的工作解决方案。 对我的问题有什么想法吗?

提前感谢, 丹尼尔

可以通过创建IsoDateTimeConverter类的新实例,根据需要设置DateTimeFormat属性,然后将转换器传递给序列化程序来控制 Json.Net 用于序列化和反序列化日期的格式。

这是一个演示:

class Program
{
static void Main(string[] args)
{
IsoDateTimeConverter dateConverter = new IsoDateTimeConverter
{
DateTimeFormat = "dd.MM.yyyy"
};
Foo foo = new Foo { Date = new DateTime(2014, 3, 12) };
// serialize an object containing a date using the custom date format
string json = JsonConvert.SerializeObject(foo, dateConverter);
Console.WriteLine(json);
// deserialize the JSON with the custom date format back into an object
Foo foo2 = JsonConvert.DeserializeObject<Foo>(json, dateConverter);
Console.WriteLine("Day = " + foo2.Date.Day);
Console.WriteLine("Month = " + foo2.Date.Month);
Console.WriteLine("Year = " + foo2.Date.Year);
}
}
class Foo
{
public DateTime Date { get; set; }
}

输出:

{"Date":"12.03.2014"}
Day = 12
Month = 3
Year = 2014

注意:使用此方法,日期格式将应用于要序列化或反序列化的所有对象上的所有日期。 如果您需要为不同的日期使用不同的格式,请参阅此问题,其中提供了几种可能的解决方案。

.net 序列化日期的可能性非常高,如下所示:

/Date(1293034567877)/

您需要解析该日期并手动排列:

function ndateFormatter(cellval, opts, rwdat, _act) {
var time = cellval.replace(//Date(([0-9]*))//, '$1');
var date = new Date();
date.setTime(time);
var month = date.getMonth() + 1;
var day = date.getDate();
var year = date.getFullYear();
return ((month > 9 ? month : "0" + month) + "/" + (day > 9 ? day : "0" + day) + "/" + year);
};

或者在您的情况下,该函数将返回:

return ((day > 9 ? day : "0" + day) + "." + (month > 9 ? month : "0" + month) + "." + year);

相关内容

  • 没有找到相关文章

最新更新