Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
JSonSerializer formatiert Datum falsch
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

JSonSerializer formatiert Datum falsch

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Regenwurm am .
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.832

beantworten | zitieren | melden

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.
Zitat
settings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "dd/MM/yyyy" } );
kann gar nicht für alles klappen.
private Nachricht | Beiträge des Benutzers
jogibear9988
myCSharp.de - Member



Dabei seit:
Beiträge: 625
Herkunft: Offenau

mhmmm..

beantworten | zitieren | melden

Probiers doch mal mit Json.NET (Popular high-performance JSON framework for .NET) oder ServiceStack.Text (.NET's fastest JSON, JSV and CSV Text Serializers)
cSharp Projekte : https://github.com/jogibear9988
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.832

beantworten | zitieren | melden

Das verwendet er doch schon; sieht man doch an der Klasse JsonConvert.
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

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

Danke euch!


€:
Zitat
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?
Könnte schwer werden, da die Klassen automatisch mittels dem EF generiert werden.
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!
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Regenwurm am .
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

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 = =)
private Nachricht | Beiträge des Benutzers