Laden...

JSonSerializer formatiert Datum falsch

Erstellt von Regenwurm vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.704 Views
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 10 Jahren
JSonSerializer formatiert Datum falsch

Hallo zusammen,

Ich übergebe mittels Javascript eine JSON Zeichenfolge an meinem MVC Controller.
Dort soll mittels dem JSONSerializer die Zeichenfolge in ein ModelObject zurück konvertiert werden.
Leider scheint die Klasse aus dd.MM.yyyy ein MM.dd.yyyy zu machen.
Jegliche Ansätze die Datumsformatierung irgendwie zu ändern sind bisher gescheitert.

Mein bisheriger Code sieht folgendermassen aus:

            
// employee ist der JSON String
JsonSerializerSettings settings = new JsonSerializerSettings();
            settings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "dd/MM/yyyy" } );

Mitarbeiter JSONemployee = JsonConvert.DeserializeObject<Mitarbeiter>(employee, settings);

Mit diesem Code erhalte ich jedoch eine FormatException.
Ohne die JsonSerializerSettings werden Tag & Monat vertauscht.

Mein JSON String hat in etwa folgendes Format

{
   "ID":"6",
   "Name":"xxxxxxxxx",
   "Vorname":"xxxxxxxx",
   "Strasse":"xxxxxxxx",
   "PLZ":"xxxxxxxxxx",
   "Ort":"xxxxxxxxxx",
   "Geburtsdatum_Raw":"699840000000",
   "Geburtsdatum":"06.03.1992",
   "Geburtsdatum_DDDWS":"0:0:-1:-10000:-10000:0:-10000:-10000:1:0:0:0",
   "Geburtsdatum_DDD_C_FNPWS":"0:0:-1:-10000:-10000:0:0px:-10000:1:0:0:0",
   "Geburtsdatum$DDD$C":"03/06/1992:03/06/1992",
   "Telefon_Home":"xxxxxxxxxxxxx",
   "Telefon_Mobil":"xxxxxxxxxxxxx",
   "Funktion":"CFO",
   "Einstellungsdatum_Raw":"1388534400000",
   "Einstellungsdatum":"01.01.2014",
   "Einstellungsdatum_DDDWS":"0:0:-1:-10000:-10000:0:-10000:-10000:1:0:0:0",
   "Einstellungsdatum_DDD_C_FNPWS":"0:0:-1:-10000:-10000:0:0px:-10000:1:0:0:0",
   "Einstellungsdatum$DDD$C":"01/01/2014:01/01/2014",
   "Ausbildung":"-",
   "Ausbildungsabschluss_Raw":"N",
   "Ausbildungsabschluss":"",
   "Ausbildungsabschluss_DDDWS":"0:0:-1:-10000:-10000:0:-10000:-10000:1:0:0:0",
   "Ausbildungsabschluss_DDD_C_FNPWS":"0:0:-1:-10000:-10000:0:0px:-10000:1:0:0:0",
   "Ausbildungsabschluss$DDD$C":"02/07/2014",
   "Email":"xxxxx@xxxx.ch",
   "AHV":"xxxxxxxxxx",
   "Krankenkasse":"xxxxxxx",
   "MutationDateTime":"07.02.2014 14:06:48",
}

Die Datumswerte kommen aus einem DevExpress DateEdit Control.
Weiss jemand eine Lösung?

Beste Grüsse,
Regenwurm

ServiceStack & Angular = =)

16.807 Beiträge seit 2008
vor 10 Jahren

Der Fehler liegt eigentlich bei DevExpress da Datumswerte unter Json eigentlich anders abgespeichert werden (laut Definition).
Gültig wäre nämlich: "TimestampCreatedOn" : ISODate("2014-01-30T13:01:47.618Z")

Die Serialisierung von Ausbildungsabschluss$DDD$C sieht auch falsch aus.

Du kannst versuchen für jedes Format einen eigenen Converter zu bauen und dann mit dem Attribut [JsonConverter(typeof(IsoDateTimeConverter))]
an jeder Property zu handieren.
Musst halt alles serialisieren.

settings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "dd/MM/yyyy" } );

kann gar nicht für alles klappen.

J
641 Beiträge seit 2007
vor 10 Jahren

cSharp Projekte : https://github.com/jogibear9988

16.807 Beiträge seit 2008
vor 10 Jahren

Das verwendet er doch schon; sieht man doch an der Klasse JsonConvert.

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 10 Jahren

dies ist natürlich die andere Möglichkeit, ich werde mal einen Blick darauf werfen.

Danke euch!

€:

Du kannst versuchen für jedes Format einen eigenen Converter zu bauen und dann mit dem Attribut [JsonConverter(typeof(IsoDateTimeConverter))]
an jeder Property zu handieren.

Meinst du damit die Attribute in der Mitarbeiter Klasse?

Oder kann ich die ebenfalls in einer Partial Class so verändern?
Ich google das mal, müsste ja Basic-Knowledge sein (Forenpunkt 1.x.x 😉)_

Alles klar, gegoogelt und schlauer geworden. Sogenannte MetaData Klassen sind das Stichwort - ich probiere die Sache in den nächsten Tagen aus - danke!

ServiceStack & Angular = =)

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 10 Jahren

Salü zusammen,

DIe Lösung war die Converter Optionen ++richtig ++einzustellen.

            IsoDateTimeConverter dateConverter = new IsoDateTimeConverter
            {
                DateTimeFormat = "dd.MM.yyyy"
            };

            Familie newEntity = JsonConvert.DeserializeObject<Familie>(JSONdetail, dateConverter);

Besten Dank noch einmal!

Gruess,
Regenwurm

ServiceStack & Angular = =)