![]() |
Delphi-Version: 10 Seattle
TJsonObject kann kein Enum?
Stelle ich mich zu dumm an oder geht folgendes nicht?
Delphi-Quellcode:
In
program JsonToEnumProject;
uses System.SysUtils, System.Json; type TEnum = (one, two, three); const input = '{"enum": "two"}'; var jsonObject: TJSONObject; enum: TEnum; begin jsonObject := (TJSONObject.ParseJSONValue(input) as TJSONObject); try // EJSONException: 'Conversion from TJSONString to TEnum is not supported' enum := jsonObject.GetValue<TEnum>('enum'); Assert( enum = TEnum.two); finally jsonObject.Destroy(); end; end.
Delphi-Quellcode:
sehe ich dass in der Routine
System.Json
Delphi-Quellcode:
bei einem enum es nicht einmal versucht wird. Ernsthaft? Ist das in aktuellen Delphi-Versionen immer noch so?
StrToTValue
Falls ja, ich habe mir einen kleinen Helper gemacht. Wäre der so ok?
Delphi-Quellcode:
(
function TJsonObjectHelper.GetValue<T>(const APath: string): T;
var enumInfo: PTypeInfo; enumAsString: String; enumAsInteger: Integer; begin enumInfo := TypeInfo(T); if(enumInfo.Kind = TTypeKind.tkEnumeration) then begin enumAsString := GetValue<String>(APath); enumAsInteger := GetEnumValue(enumInfo, enumAsString); if(enumAsInteger <> -1) then Result := TValue.FromOrdinal(enumInfo, enumAsInteger).AsType<T>() else raise EJSONException.CreateFmt(SNoConversionAvailableForValue, [enumAsString, enumInfo.Name]); end else Result := inherited GetValue<T>(APath); end; ![]() |
AW: TJsonObject kann kein Enum?
Ja, so toll die JSON Unterstützung in Delphi auch ist, meinen Ansprüchen ist sie damals auch nicht gerecht geworden. Wenn du JSON in der von dir gezeigten manuellen Art und Weise parsen willst, sind diese Klassen für dich vielleicht von Interesse:
![]() Kurze Doku gibts auch: ![]() |
AW: TJsonObject kann kein Enum?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz