我正在尝试使用默认的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
值?
答案 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"}