尝试使用 REST.Json 将 json 转换为对象时出现 EConvert 异常无效日期时间

EConvert exception invalid date time when trying to convert json to object using REST.Json

以下代码以异常结束

'2019.10.5 14:16:14,1000' is not a valid date and time

尝试将 json 解析为对象时。问题似乎是日期中的小数点。

  JSonStr := '{"orderNumber": "395409772020_1", "modified": "2019-10-05T14:16:14.9995946Z"}';  
  Order := TJson.JsonToObject<TOrder>(JSonStr);

如果我使用向下舍入的毫秒精度日期,即 "modified": "2019-10-05T14:16:14.4995946Z" 它工作正常。

我尝试添加选项来设置日期格式。 Order := TJson.JsonToObject<TOrder>(JSonStr, [joDateFormatParse]);。这可以防止代码崩溃,但无法识别 DateTime 并且该值以“0”结尾。

无论如何,这只是库中的一个错误? 我是 运行 Delphi 10.2 更新 3

我用你的代码构建了一个简单的演示程序,它与 Delphi 10.4.1 完美配合。

这里是演示的源代码:

unit JsonParseDateDemoMain;

interface

uses
    Winapi.Windows, Winapi.Messages,
    System.SysUtils, System.Variants, System.Classes,
    Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
    REST.Json;

type
    TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
    end;

type
    TOrder = class
    private
        FOrderNumber : String;
        FModified    : TDateTime;
    published
        property OrderNumber : String    read  FOrderNumber write FOrderNumber;
        property Modified    : TDateTime read  FModified    write FModified;
    end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    JsonStr : String;
    Order   : TOrder;
begin
    JsonStr := '{"orderNumber": "395409772020_1", ' +
                '"modified": "2019-10-05T14:16:14.9995946Z"}';
    Order := TJson.JsonToObject<TOrder>(JsonStr);
    Memo1.Lines.Add(Order.OrderNumber);
    Memo1.Lines.Add(DateTimeToStr(Order.Modified));
    Order.Free;
end;

end.

这是您使用的 Delphi 版本中的错误。