2017-01-13 4 views
1

DateTime値からタイムスタンプを削除するカスタムJSONフォーマッタがあります。以下は、コードされています。私はそのフォーマッタを使用する場合、文字列はWeb API 2用のカスタムJSONフォーマッタの使用

var isoJson = JsonConvert.SerializeObject(value, new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" }); 
     return isoJson; 

上記フォーマッタによって2回連載しているため、私のWebApiConfigファイル内JSON.Netフォーマッタのさ。次はJSON.Netフォーマッタのコードです:私はJSON.Netフォーマッタを削除し、私のカスタムいずれかを使用する場合

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 

、JSONを一度シリアライズされますが、XMLに埋め込まれています。

JSON.Netフォーマッタを削除し、JSONをXMLに埋め込まずにカスタムフォーマッタを使用するにはどうすればよいですか?

+1

なぜ、コンバータ属性を日付専用プロパティに適用するのではなく、コンバータをグローバルに置き換えようとしていますか?この[似たような質問](http://stackoverflow.com/questions/16320762/dates-without-time-in-asp-net-web-apis-json-output)は簡単に追加するだけです。例えば、[JsonConverter (typeof(OnlyDateConverter))] 'プロパティに –

答えて

1

Web APIは、あなたがそれを指示したり、XMLを使用したりしない限り、文字列をJsonに2回変換しません。あなたはコードを提供していないので、これらの問題のそれぞれがなぜ発生するのかは分かりません。

ただし、元の問題を解決するには、DateTimeのプロパティを日付としてシリアル化するのは非常に簡単です。カスタムコンバータを作成し、属性を使用して必要なプロパティに適用するだけです。これはJson.NETのSerializing Dates in JSONに記述されています。実際の実装in this arguably duplicate SO questionを見つけることができます。

その質問からコピーするには、コンバータを作成:

public class OnlyDateConverter : IsoDateTimeConverter 
{ 
    public OnlyDateConverter() 
    { 
     DateTimeFormat = "yyyy-MM-dd"; 
    } 
} 

、その後日付専用としてシリアライズしたい任意のプロパティに適用されます。同じ質問ショーで

public class MyClass 
{ 
    ... 
    [JsonConverter(typeof(OnlyDateConverter))] 
    public DateTime MyDate{get;set;} 
    ... 
} 

別の答え構成を使用してグローバルに変更する方法:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" }); 

または、クエストを使用してmコンバータ:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new OnlyDateConverter()); 
+0

あなたの様々なソリューションをありがとう。私は設定ルートに行って、それは素晴らしい仕事をした。 – user1647160

関連する問題