7

私は現在、ajax経由で.Netタイプをajax経由でクライアントアプリケーションに送信するプロジェクトに取り組んでいます。オブジェクトがシリアル化されてクライアントに設定されることに問題はありません。

まったく同じオブジェクトを取得し、Web メソッドを介してサーバーにポストバックすると、次のエラーで問題が発生します。/Date(1373950800000)/ is not a valid value for DateTime. これは、Microsoft が提供した方法であるため、かなり面倒ですが、それは重要ではありません。

誰でもこれを簡単に修正できますか?オブジェクトを ajax 呼び出しから返す直前に変更することなく、これを実現できるシームレスな方法が必要です。

4

5 に答える 5

8

あなたの問題は、使用しているサーバー側の JavaScript シリアライザーに帰着します。JsonDataContractSerializer(ASP.NET MVC の既定のシリアライザー) または( NewtonSoft Json SerializerASP.NET Web API の既定のシリアライザー) のいずれかです。

この日付マングリングの問題と考えられる解決策の視覚的な例については、JSON Dates are Different in ASP.NET MVC and Web API を確認してください。

于 2013-08-02T17:08:02.703 に答える
7

コードに続くシリアル化が問題を解決する間、DateFormat を処理します。

   JsonConvert.SerializeObject(yourobject, Formatting.Indented,
                    new JsonSerializerSettings
                    {
                         DateFormatHandling = DateFormatHandling.IsoDateFormat
                    });

日付は 2009-02-15T00:00:00Z 形式になります

于 2016-07-21T07:49:27.287 に答える
2

これはエラーを解決するのに役立ちます:クリックしてください

var yourDateTimeObject = ...
var converter = new IsoDateTimeConverter();

string isoDateTime = Newtonsoft.Json.JsonConvert.SerializeObject(yourDateTimeObject, converter);
于 2013-08-02T17:00:38.523 に答える
0

これは、私がこれらのことに使用する方法です。

最初に、日付パラメーターからジャンクを取り除く必要があります

String unixDate = "/Date(1373950800000)/";
unixDate = unixDate.Replace("/Date(","").Replace(")/", "");

さて、.NET と UNIX は異なる方法で時間を測定するため、1970 年 1 月 1 日に設定された日付を作成し、渡された日付の数値部分を追加することで、それを補正する必要があります。

DateTime dotNetDate = new DateTime(1970, 1, 1);
dotNetDate = dotNetDate.AddMilliseconds(Convert.ToInt64(unixDate)

また、ここでは精度が失われることに注意してください。.NET の日付は最も近いナノ秒単位ですが、UNIX の日付は最も近いミリ秒単位です。

于 2013-08-02T17:01:04.817 に答える
-1

スラッシュをエスケープして日付を送信してみてください。JSON を ASP.NET WebAPI サービス メソッドに投稿する iPad クライアントがあり、この方法で日付を送信する必要があります。

"due": "\/Date(1335830400000)\/"

于 2013-08-02T18:28:17.787 に答える