2

我正在尝试使用默认的 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以相同样式输出值?

4

2 回答 2

2

我相信是内置的 JsonSerializer负责这个。

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

return Response.AsJson(
    new Event { Message = "Hello", Timestamp = DateTime.UtcNow.ToString() });
于 2013-07-04T10:47:37.913 回答
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"}
于 2013-07-08T14:59:04.253 回答