![]() |
System.JSON.Serializers - TBCD
Hallo,
ich verwende TJsonSerializer.Serialize<>() aus "System.JSON.Serializers" um meine als JSON zu serialisieren. Wenn ich nun eine Eigenschaft mit dem Datentypen TBcd da drin habe wird mir nicht der Wert angezeigt sondern nur Precision und SignSpecialPlaces. Wie kriege ich das hin das ich beim BCD da auch einfach nur die Nummer bekomme? Find da nichts passendes zu. Converter, Contract wird es wohl sein aber Blicke da noch nicht so ganz durch. Hat da jemand ein Tipp? |
AW: System.JSON.Serializers - TBCD
Hab jetzt eine Lösung.
Das müsste ich aber immer beim serialisieren explizit mitgeben. Kann ich diesen Converter auch irgendwie allgemein registrieren für den TJsonSerializer?
Delphi-Quellcode:
TBCDConverter = class(TJsonConverter)
public procedure WriteJson(const AWriter: TJsonWriter; const AValue: TValue; const ASerializer: TJsonSerializer); override; function ReadJson(const AReader: TJsonReader; ATypeInf: PTypeInfo; const AExistingValue: TValue; const ASerializer: TJsonSerializer): TValue; override; function CanConvert(ATypeInf: PTypeInfo): Boolean; override; end; ... var lJsonSerializer := TJsonSerializer.Create; try var lBCDConverter := TBCDConverter.Create; try lJsonSerializer.Converters.Add( lBCDConverter); lJsonString := lJsonSerializer.Serialize< TMyClass>( MyObject); finally lBCDConverter.Free; end; finally lJsonSerializer.Free; end; ... |
AW: System.JSON.Serializers - TBCD
Es gibt 3 Möglichkeiten
1. Du kopierst System.JSON.Serializers.pas in deinen Projektordner und modifizierst die Datei. Ich füge sie dann auch immer noch dem Projekt hinzu (das sie in der .dpr datei zu finden ist). Das funktiioniert in aktuellen Delphis. Der compiler bevorzugt die eigene version, sogar beim kompilieren der mitgelieferten units. 2. Du machst eine nachfahren klasse von TJsonSerializer und nennst sie ebenfall TJsonSerializer...dann sorgst du dafür dass deine Unit in der du das gemacht hast immer die letzte(oder war es die erste) genannte unit ist. dadurch wird der ursprungstyp verdeckt. 3. Du machtst eine eigene ableitung TJsonSerializer und benutzt die in allen units deines projekts...das könnte dazu führen das andere units aus frameworks der aus der VCL den original serializer und nicht deinen benutzen. |
AW: System.JSON.Serializers - TBCD
Ich habe das jetzt zwar nicht probiert, insofern keine Gewähr, aber du könntest die entsprechenden Fields mit einem Attribut versehen:
Delphi-Quellcode:
type
TMyClass = class private [JsonConverter(TBCDConverter)] FMyBcd: TBcd; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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 by Thomas Breitkreuz