つまり、API コントローラーと結果を使用する Javascript の間で、Date が素敵なNaN
私の質問は、この長いチェーンをどこで、おそらくどのように修正することをお勧めするかということです。
ステップ 1: LINQ を使用してデータベースからオブジェクトを取得する
return _dbContext.Points.Where(
point => point.AccountId == account.AccountId)
.OrderBy(point => point.EarnedOn).ToList();
ここで変更を加えるのは不合理に思えます。このモデルは DateTime フィールドを指定しているため、実際には文字列とのやり取りはありません。
ステップ 2: API コントローラーが応答を送信する
var points = _pointRepository.GetByUserName(userName);
return Request.CreateResponse(HttpStatusCode.OK, points);
ここで日付を解析する方法を指定できますか? サーバー側で処理することさえ理にかなっていますか? 次のように、すべてのオブジェクトをループして手動で設定できると思います。
for (var i = 0; i < points.Count(); i++ )
{
points.ElementAt(i).EarnedOn = points.ElementAt(i).EarnedOn.ToUniversalTime();
}
しかし、複数の列挙について話してください!
ステップ 3: クライアントは JSON データを解析して JS オブジェクトに変換し、Date を文字列から int に解析します。 読みやすくするために大幅に短縮されています。
var points = JSON.parse(response);
for(i = 0; i < points.length; i++){
var date = Date.parse(points[i].EarnedOn);
この時点で、私にできることは限られています。ステップ 2 の最後で既に日付を文字列に変換していますが、ターゲットにしているブラウザーは、C# の既定のDateTime.toString
形式を使用する方法を認識していません (それが送信されていると思います)。一部のブラウザでは動作しますが、他のブラウザではNaN
.
長い説明で申し訳ありませんが、修正を適用する場所と方法を誰かが指摘できれば幸いです。
====更新====
問題のブラウザは、Android のストック ブラウザです。これは、携帯電話と BlueStacks エミュレーターの両方でテストしました。どちらも最新で、どちらでも動作しません。それはChromeで動作します。
その時の JSON 出力 (他のすべてのデータを切り取ったもの) は次のようになります。
"EarnedOn":"2012-05-10T00:00:00"