Zu 1)
Ich habe es nicht im Kopf, aber durch Ausprobieren sieht man meine ich dass er weder auf die Nase fällt wenn dein Objekt mehr Felder hat als das Json, noch umgekehrt wenn das Json mehr Felder hat als dein Objekt. Eigentlich ist dir ja klar was du als Json bekommst. Das ist doch ein perfekter Kandidat für
Unit-Tests. Sollte sich der Json-Mechanismus in Delphi eines Tages ändern würdest du das mit deinen Tests ja sofort merken wenn dort etwas nicht mehr stimmt
Zu 2)
Enumemerationen sind jetzt etwas kniffelig. Denn in JSON gibt es so etwas nicht. Deine Gegenstelle legt die jetzt als Integer ab sagst du. Hätte man auch als Strings machen können. Ich sehe zwei Möglichkeiten:
- Einen eigenen JSON-Interceptor bauen
- Die billige Lösung
Der Interceptor würde die Zahl aus deinem Json auswerten können und wieder auf deinen Enum-Typen zurückführen können. Ich finde
hier im Forum einmal etwas dazu, bekomme es selbst aber auf die Schnelle nicht mehr hin.
Ich finde es auch in dem Fall einen Overkill. Im Fall Enum/Zahl - ganz ehrlich - Warum nicht einfach die Felder in deinem Objekt auch als Zahl (z.B. Byte) machen und die Getter & Property anpassen? Zu irgend etwas müssen diese Getter ja gut sein
Delphi-Quellcode:
type
TEMStatus=(emsNeu, emsIB, emsKorr, emsGepr);
TEMDringlichkeit=(emdLowest, emdLower, emdNormal, emdHigh, emdHighest);
TErrorMessage = class
private var
FStatus: Byte;
FDringlichkeit: Byte;
private
function getStatus(): TEMStatus;
function getDringlicheit: TEMDringlichkeit;
public
property Status: TEMStatus read getStatus;
property Dringlichkeit: TEMDringlichkeit read getDringlicheit;
end;
implementation
{ TErrorMessage }
function TErrorMessage.getDringlicheit(): TEMDringlichkeit;
begin
Result := TEMDringlichkeit(FDringlichkeit);
end;
function TErrorMessage.getStatus(): TEMStatus;
begin
Result := TEMStatus(FStatus);
end;