如何在NancyFX中将DateTimeOffset序列化为JSON?

时间:2013-07-03 13:43:58

标签: json nancy

我正在尝试使用默认的JSON序列化程序从我的Nancy应用程序返回一些JSON。我有以下DTO课程:

class Event
{
    public DateTimeOffset Timestamp { get; set; }
    public string Message { get; set; }
}

当我退回时,如下:

return Response.AsJson(
    new Event { Message = "Hello", Timestamp = DateTime.UtcNow });

...我返回了所有DateTimeOffset属性,所以看起来像这样:

"Timestamp": {
    "DateTime":"\/Date(1372854863408+0100)\/",
    "UtcDateTime":"\/Date(1372858463408)\/",
    "LocalDateTime":"\/Date(1372858463408+0100)\/",
    "Date":"\/Date(1372806000000+0100)\/",
    "Day":3,
    "DayOfWeek":3

我期待"Timestamp":"\/Date(1372854863408+0100)\/",没有其他任何东西。这是Nancy用于DateTime值的格式。

如何配置Nancy以相同的样式输出DateTimeOffset值?

2 个答案:

答案 0 :(得分:2)

我相信这是built-in JsonSerializer的责任。

你有什么理由不能使用这种方法吗?

return Response.AsJson(
    new Event { Message = "Hello", Timestamp = DateTime.UtcNow.ToString() });

答案 1 :(得分:0)

您可以通过向返回DateTimeOffset.DateTime属性的模型对象添加属性来解决此问题,而无需使用自定义序列化程序。然后将DateTimeOffset属性更改为internal而不是public,以确保JSON序列化程序不会返回它。

此方法还允许您保留所需的标准JSON时间戳,并允许您保留DateTimeOffset以供服务器端使用。

public class Event
{
    internal DateTimeOffset Timestamp { get; set; }
    public DateTime DateTimeOnly {
        get { return Timestamp.DateTime; }
    }
    public string Message { get; set; }
}

来自Fiddler的原始JSON结果:

{"DateTime":"\/Date(1373309306039-0400)\/","Message":"Hello"}