2013-05-01 15 views
21

C'è un modo semplice per configurare in modo che JSON.NET alcuniDateTime campi verranno formattati senza tempo e altri DateTime campi saranno ancora formattati con il tempo?date senza il tempo in uscita JSON ASP.NET Web API

Esempio:

{ firstName: 'John', lastName : 'Doe', birthday: '1965-09-23' } 

risposta

38

Se avete bisogno di questo per effetto solo un campo particolare, creare un tipo di convertitore prima:

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

e quindi aggiungere questo attributo a qualsiasi campo/proprietà per cui si desidera:

[JsonConverter(typeof(OnlyDateConverter))] 
+0

Bello. Stavo solo scrivendo la stessa cosa, ma estendendo 'DateTimeConverterBase'. Questo è molto più pulito! –

+0

Esattamente quello di cui avevo bisogno! Grazie mille Youssef! – RooSoft

+0

A quanto pare si dovrebbe usare '/' invece di trattini per il beneficio di alcuni vecchi browser: http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html –

4

Prova ad aggiungere questa riga per configurare il Web API:

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

Ciò avrebbe effetto a livello globale, non solo su "alcuni" campi, come richiesto. –

0

La risposta di Yousesef con lo OnlyDateConverter è la migliore. Ma qui è un'alternativa:

private DateTime _birthday; 
public string Birthday 
{ 
    get { return _birthday.ToString("yyyy-MM-dd"); } 
    set { 
      _birthday = DateTime.ParseExact(value, "yyyy-MM-dd", 
              CultureInfo.InvariantCulture); 
     } 
} 

Advantage - Non è necessario associare la libreria Newtonsoft.Json alle classi.

Svantaggio - La proprietà è ora esposta come una stringa ovunque la si utilizza, il che può causare il proprio set di problemi.

+0

Ho considerato questo approccio, ma potrebbe non essere il migliore quando i calcoli potrebbero essere coinvolti tra le date. Grazie comunque! – RooSoft

+0

@RooSoft - Concordato. –