2013-07-03 29 views
2

我試圖從我的Nancy應用程序返回一些JSON,使用默認的JSON序列化程序。我有以下DTO類:如何在NancyFX中將DateTimeOffset作爲JSON序列化?

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)\/",沒有其他的東西。這是南希用於DateTime值的格式。

如何配置Nancy以相同樣式輸出DateTimeOffset值?

回答

2

我相信這是對此負責的built-in JsonSerializer

任何你不能使用這種方法的原因?

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

因爲這不是JSON時間戳的標準格式。 –

+2

你有沒有考慮過使用Json.Net或ServiceStack和Nancy?它們爲DateTimeOffset提供內置處理程序。或者嘗試寫一些類似https://github.com/NancyFx/Nancy/blob/master/src/Nancy/Json/Converters/TimeSpanConverter.cs的日期時間偏移量 –

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; } 
} 

生JSON導致提琴手:

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