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)\/"ていましたが、他のものは何もありませんでした。これは、ナンシーがDateTime値に使用する形式です。

DateTimeOffset同じスタイルで値を出力するように Nancy を構成するにはどうすればよいですか?

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ます。次に、JSON シリアライザーによって返されないようにする代わりに、DateTimeOffsetプロパティをに変更します。internalpublic

このアプローチにより、必要な標準の 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 に答える