无法从 NavJsonValue 转换为 NavDate

问题描述

向端点发出 Get-Request 请求后,我逐键解析返回的 Json 字符串,这很有效。当我尝试将返回的日期 ('createdAt') 转换为日期类型时,就会出现问题。

我收到的错误

Die Konvertierung von Microsoft.Dynamics.Nav.Runtime.NavJsonValue in Microsoft.Dynamics.Nav.Runtime.NavDate 不是最新的。

翻译过来就是:

无法从 NavJsonValue 转换为 NavDate

我解析的 Json

{

    "entryNo": "2","title": "TEST","description": "Test Item","websiteUrl": "Test Url","createdAt": "14.01.2021"

}

相关代码

_testEntry.CreatedAt := GetJsonToken(jsonObject,'createdAt').AsValue().AsDate();

local procedure GetJsonToken(jsonObject: JsonObject; tokenKey: Text) jsonToken: JsonToken;
begin
    if not jsonObject.Get(tokenKey,jsonToken) then
        exit;
end;

解决方法

返回的日期格式不是有效的 JavaScript 格式,这是 AsDate() 所期望的。

如果您控制端点,则应将日期格式更改为 YYYY-MM-DD

如果您无法控制端点,则需要解析日期值:

local procedure ParseDate(Token: JsonToken): Date
var
    DateParts: List of [Text];
    Year: Integer;
    Month: Integer;
    Day: Integer;
begin
    // Error handling omitted from example
    DateParts := Token.AsValue().AsText().Split('.');
    Evaluate(Day,DateParts.Get(1));
    Evaluate(Month,DateParts.Get(2));
    Evaluate(Year,DateParts.Get(3));
    exit(DMY2Date(Day,Month,Year));
end;