JsonConvert.DeserializeObject could not convert string to DateTime when using non-us date formats

55,878

Try specifying the DateTime format specifically using an IsoDateTimeConverter, and pass it into the JsonConvert.DeserializeObject<>() method.

...
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);
...
Share:
55,878
rism
Author by

rism

Looking forward to the day when interfacing with technology on a pure thought basis is occurring on a massive scale.

Updated on April 18, 2020

Comments

  • rism
    rism about 4 years

    I have the following serialized json object:

    "{\"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}"
    

    One this is sent to the server I am trying to deserialize as follows:

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

    And Im hitting an error:

    "Could not convert string to DateTime: 13/02/2014. Path 'DeliveryDate', line 1, position 323."

    Since the date is valid I'm assuming its a problem with non-us format. In fact I know it is because if I do less than 13 for my days it deserializes just fine. So how do I indicate to deserializer to use non-us dates?

  • Corneliu Serediuc
    Corneliu Serediuc over 6 years
    Thank you! It was really helpful!
  • Sohail Shahzad
    Sohail Shahzad over 3 years
    Really helpful solution.