web-dev-qa-db-fra.com

JsonConvert.DeserializeObject n'a pas pu convertir la chaîne en DateTime lors de l'utilisation de formats de date non américains

J'ai l'objet json sérialisé suivant:

"{\"LineItems\":[{\"LineID\":1,\"QuoteID\":\"00000000-0000-0000-0000-000000000000\",\"Quantity\":\"1\",\"UnitPriceExTax\":\"2\",\"UnitPriceTaxRate\":\"2\",\"UnitPriceTaxAmt\":0,\"LineTotalExTax\":2,\"LineTotalTaxAmt\":0.040000000000000036,\"LineTotalIncTax\":2.04}],\"QuoteID\":[],\"CurrencyID\":\"2\",\"SupplierRef\":\"SDFSFSDF\",\"DeliveryDate\":\"22/02/2014\",\"QuoteAvailablityStartDate\":\"13/02/2014\",\"QuoteAvailablityEndDate\":\"09/02/2014\",\"OpeningComments\":\"WWSFSFS \",\"PricingComments\":\"XSDFSDF \",\"DeliveryComments\":\"SDFSFSDF SDFSFSF\",\"TermsComments\":\"SFSFSDF SDFSFSDF SDFS\",\"FreightExTax\":\"1\",\"FreightExTax2\":1,\"FreightTaxRate\":\"1\",\"FreightTaxAmt\":0.010000000000000009,\"FreightIncTax\":1.01,\"TotalLinesExTax\":2,\"TotalLinesTaxAmt\":0.040000000000000036,\"TotalExTax\":3,\"TotalTaxAmt\":0.050000000000000044,\"TotalIncTax\":3.05}"

Celui-ci est envoyé au serveur que j'essaie de désérialiser comme suit:

var json = Request.RequestContext.HttpContext.Request.Params["EoiDraftModel"];
var ld = JsonConvert.DeserializeObject<EoiDraftViewModel>(json);

Et je frappe une erreur:

"Impossible de convertir la chaîne en DateTime: 13/02/2014. Chemin 'DeliveryDate', ligne 1, position 323."

Puisque la date est valide, je suppose que c'est un problème avec le format non américain. En fait je sais que c'est parce que si j'en fais moins de 13 pour mes journées ça se désérialise très bien. Alors, comment puis-je indiquer au désérialiseur d'utiliser des dates non américaines?

26
rism

Essayez de spécifier le format DateTime spécifiquement à l'aide d'un IsoDateTimeConverter et passez-le dans la méthode JsonConvert.DeserializeObject<>().

...
var json = Request.RequestContext.HttpContext.Request.Params["EoiDraftModel"];

var format = "dd/MM/yyyy"; // your datetime format
var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = format };

var ld = JsonConvert.DeserializeObject<EoiDraftViewModel>(json, dateTimeConverter);
...
47
IronGeek