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 = =)
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
cSharp Projekte : https://github.com/jogibear9988
Das verwendet er doch schon; sieht man doch an der Klasse JsonConvert.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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 = =)
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 = =)