2017-03-22 2 views
1

DateTimesがシリアル化されたときに値が0の場合はミリ秒単位で終了する.NET Core APIに問題がありました。This質問で問題が説明されています。私は.NETのコアスタートアップクラスに以下を追加し、それは私がGETをしたとき、すべての日付が正しくフォーマットされることを、このような問題解決:これを実装した後.NET APIに追加されたIsoDateTimeConverterがデフォルトのモデルバインディングを破る

services.AddMvc() 
    .AddJsonOptions(options => 
    { 
     var settings = options.SerializerSettings; 
     var dateConverter = new IsoDateTimeConverter 
     { 
      DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff" 
     }; 
     settings.Converters.Add(dateConverter); 
    }); 

を、私はそれがデフォルトのモデルバインディングを破ったことがわかりました他の場所。日付コンバータを実装した後

{ 
    dateOfBirth: '1981-04-18' 
} 

public class PatientRegistrationViewModel 
{ 
    public DateTime DateOfBirth { get; set; } 
} 

は以前、私はそれが正常にバインドリクエストボディに、次のJSONデータを渡した:たとえば、私は次のviewmodelを受け入れPOSTエンドポイントを持っています私のコントローラでは、上記のviewmodelはnullになります。

+0

「DateTimeFormat」文字列の最後に '' Z''を忘れてしまったのでしょうか? – haindl

+0

@haindl残念ながら、それはそれをしませんでした。 – im1dermike

答えて

0

一つの迅速な解決がWriteOnlyIsoDateTimeConverterを導入し、使用することです:

public class WriteOnlyIsoDateTimeConverter : IsoDateTimeConverter 
{ 
    public override bool CanRead { get { return false; } } 
} 

falseを返すようにCanReadをオーバーライドすることで、モデルバインダーは、出力フォーマットのためのコンバータを使用しながら、現在、組み込みの日付の解析を継続して使用する必要があります。

this questionのようにJsonOutputFormatterを置き換えることもできます。

+0

'WriteOnlyIsoDateTimeConverter' FTW! – im1dermike

関連する問題