7

オブジェクトを JsonSerializer.Serialize とは異なる方法でシリアルJsonConvert.SerializeObject化する理由がわかりません。DateTime

クラスを考えると

public class Test
{
     [JsonConverter(typeof(JavaScriptDateTimeConverter))]
     public DateTime DeliveryDate { get { return DateTime.Now; } }
}

@Html.Raw(JsonConvert.SerializeObject(new Test()))

出力:

"DeliveryDate": "2013-03-01T07:00:00.000Z"

しかし、JsonNetResult のように JsonSerializer.Serialize を使用すると: http://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspx

次の出力が得られます。

"DeliveryDate": new Date(1362520794703)

なぜこの矛盾があるのか​​ わかりません。私は内部的JsonConvert.SerializeObjectに使用すると思っていたでしょう。JsonSerializer

4

1 に答える 1

10

わかりました。誰かがこのシナリオに出くわした場合に備えて共有したいと思います。

そのため、ずっと前に、MVC4 でDateTimeオブジェクトをシリアル化する際に問題がありました。JsonResult基本的に、私のDateTimeオブジェクトはシリアライズされていました。モデル クラスのプロパティに追加し、ビューで使用することを"\/Date(1239018869048)\/"推奨する SO に関する JSON.NET の作成者からの回答を読んだと思い ます。確かに私はそれをやったので、当時の私の短期的な問題は解決しました[JsonConverter(typeof(JavaScriptDateTimeConverter))]DateTime@Html.Raw(JsonConvert.SerializeObject(Model)

時が経ち、今日、ユーザーがサーバーに何かを投稿した後、その場で javascript viewModel を更新することをサポートする必要があります。今日、私のエラーが発生します。すべてのDateTimeプロパティが属性で装飾されており、それらをクライアントにシリアライズしようとすると、シリアライザーは期待どおりに動作していたことがわかりました。JsonConvert.SerializeObjectこれは、実際には属性を尊重していないと私に信じさせました。

問題のある属性を削除した後、すべてがうまく機能し始めました。微調整すると、デフォルトをそのまま使用でき、日時文字列DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKindの を忘れることができることがわかりました。Z

于 2013-03-05T23:07:51.467 に答える