web-dev-qa-db-ja.com

JsonConvert.DeserializeObjectは、米国以外の日付形式を使用している場合、文字列をDateTimeに変換できませんでした

次のシリアル化されたjsonオブジェクトがあります。

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

これは、次のようにデシリアライズしようとしているサーバーに送信されます:

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

そして、エラーを打つ:

「文字列をDateTimeに変換できませんでした:13/02/2014。パス 'DeliveryDate'、行1、位置323。」

日付は有効なので、私はそのフォーマットがnon-usフォーマットに問題があると考えています。実際、私がそれを知っているのは、もし私が13日に満たない時間をすれば、うまくシリアル化解除できるからです。では、デシリアライザーに米国以外の日付を使用するように指示するにはどうすればよいですか?

26
rism

DateTimeを具体的に使用してIsoDateTimeConverter形式を指定してみて、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