![]() |
TJson.ObjectToJsonString - Reihenfolge der Felder ändern
Hallo,
wenn ich eine Klasse ableite werden die neuen Felder/Eigenschaften oben angehängt und nicht unten. Kann man das irgendwie beeinflussen? Codebeispiel
Delphi-Quellcode:
TTest = class(TObject) private FID: Integer; FValue: String; public property ID: Integer read FID write FID; property Value: String read FValue write FValue; end; TAdditionTest = class(TTest) private FAdditionValue: String; public property AdditionValue: String read FAdditionValue write FAdditionValue; end; TTestContainer = class(TObject) Test: TTest; Addition: TTest; end; procedure TForm33.Button1Click(Sender: TObject); begin var lTestContainer := TTestContainer.Create; var lTest := TTest.Create; var lAdditionTest := TAdditionTest.Create; try lTestContainer.Test := lTest; lTestContainer.Addition := lAdditionTest; Memo1.Lines.Add( TJson.ObjectToJsonString( lTestContainer)); finally lAdditionTest.Free; lTest.Free; lTestContainer.Free; end; end; Ergebnis
Code:
Ich hätte erwartet das additionValue an letzter Stelle landet.
{
"test":{ "iD":0, "value":"" }, "addition":{ "additionValue":"", "iD":0, "value":"" } } An sich wäre das für die weitere Arbeit mit dem JSONString ja nicht schlimm, wäre nur schön wenn man Eigenschaften wie z.B. ID an erster Stelle haben könnte. |
AW: TJson.ObjectToJsonString - Reihenfolge der Felder ändern
Die Reihenfolge wird durch den Aufruf von
Delphi-Quellcode:
vorgegeben. Da wirst du nur schwer Einfluss nehmen können.
TRttiType.GetFields
|
AW: TJson.ObjectToJsonString - Reihenfolge der Felder ändern
Versuch mal
Delphi-Quellcode:
Eigentlich nutzt man das, um die Sichtbarkeit der Property zu ändern (Protected>Public>Published), aber vielleicht hilft's hier ja auch.
type
TAdditionTest = class(TTest) private FAdditionValue: String; public property ID; property Value; property AdditionValue: String read FAdditionValue write FAdditionValue; end; TRttiType.GetFields geht halt die Vererbung durch, also erst alles "neue" in TAdditionTest und dann wird unten das von dem Vorfahren (TTest) an die Liste angehängt. (oben in die Liste einzufügen hielt man wohl für unnötig umständlich) |
AW: TJson.ObjectToJsonString - Reihenfolge der Felder ändern
Zitat:
Hat leider keine Einfluss. Wie ich das verstanden habe werden auch gar nicht die Properties verwendet sondern die F-Variablen. Also es macht auch kein Unterschied in der Reihenfolge wenn ich die Properties anders positionieren würde. Wenn ich die F-Variablen anders positioniere dann ändert sich auch die Reihenfolge im JSON-String. |
AW: TJson.ObjectToJsonString - Reihenfolge der Felder ändern
Zitat:
|
AW: TJson.ObjectToJsonString - Reihenfolge der Felder ändern
Ach stimmt ja ... GetField :wall:
Ich fand es eh schon immer grenzwertig, dass zuviele Serialisierungen auf "interne" Felder gehen, anstatt auf "öffentliche" Schnittstellen (Property und/oder zumindestens "ab" public/published). Stell dir mal vor jemand entfernt das "private" aus der RTTI (was möglich ist), da "Fremde" darin sowieso gefälligst nichts dran rumzupfuschen haben. Eventuell hast du ja Glück und kannst mit [Attributen] diese Serialisierung beeinflussen? |
AW: TJson.ObjectToJsonString - Reihenfolge der Felder ändern
Zitat:
|
AW: TJson.ObjectToJsonString - Reihenfolge der Felder ändern
Du könntest mit
Delphi-Quellcode:
an das erzeugte Json-Objekt kommen und da die entsprechende Umsortierung vornehmen bevor du es in einen String wandelst. Ist aber auch irgendwie nicht wirklich eine Lösung.
TJson.ObjectToJsonValue
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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