Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   REST.Json.TJson.ObjectToJsonString - Options nicht in JSON schreiben (https://www.delphipraxis.net/217654-rest-json-tjson-objecttojsonstring-options-nicht-json-schreiben.html)

swestner 13. Aug 2025 08:33

Delphi-Version: 12 Athens

REST.Json.TJson.ObjectToJsonString - Options nicht in JSON schreiben
 
Hallo,

wenn ich ein Objekt mit REST.Json.TJson.ObjectToJsonString in ein JSON schreibe dann schreibt mir die Methode immer noch die Optionen des JSONStreamers mit ins JSON. Das sieht dann so aus:

{
"clientSettings":{
"client":[
{
"clientid":"0",
"Options":[
"joIgnoreEmptyStrings",
"joIgnoreEmptyArrays",
"joDateIsUTC",
"joDateFormatISO8601",
"joIndentCasePreserve"
]

},

Kann man das irgendwie abschalten?

Grüße

Stefan

jaenicke 13. Aug 2025 09:06

AW: REST.Json.TJson.ObjectToJsonString - Options nicht in JSON schreiben
 
Das heißt, du hast eine Property Options, die nicht mitgeschrieben werden soll? Das sollte mit dem Attribut
Delphi-Quellcode:
[JSONMarshalled(False)]
gehen.

Der schöne Günther 13. Aug 2025 09:17

AW: REST.Json.TJson.ObjectToJsonString - Options nicht in JSON schreiben
 
Sicher? Kannst du das an einem Beispiel nachstellen?

Delphi-Quellcode:
program Project1;

uses Rest.Json;

type
   TMyObject = class
      someField: Byte;
      someText: String;
   end;

begin
   var myObj := TMyObject.Create();
   myObj.someField := 42;
   myObj.someText := 'Hallo Welt';

   const asJson = Rest.Json.TJson.ObjectToJsonString(myObj);
   Assert(asJson = '{"someField":42,"someText":"Hallo Welt"}');
end.

swestner 13. Aug 2025 09:18

AW: REST.Json.TJson.ObjectToJsonString - Options nicht in JSON schreiben
 
Die Methode ObjectToJsonString hat einen Parameter Options. Da kann so Zeug wie Datumsformat usw. spezifiziert werden.
Diese Options, welche NICHTS mit dem zu schreibenden Objekt zu tun haben, schreibt der Marshaller aber mit in das JSON.
Das möchte ich aber nicht.

@Schöner Günther:
Du mußt den Parameter Options mit spezifizieren, dann hast Du diese auch im JSON.

class function ObjectToJsonString(AObject: TObject; AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601, joBytesFormatArray, joIndentCaseCamel]): string;

Ich erstelle nachher mal ein Beispiel.

jaenicke 13. Aug 2025 10:22

AW: REST.Json.TJson.ObjectToJsonString - Options nicht in JSON schreiben
 
Das hatte ich auch ausprobiert, aber das ist bei mir nicht passiert, egal ob ich wenige oder sogar alle möglichen Werte übergeben habe. Ein Beispiel wäre daher wichtig.

swestner 14. Aug 2025 21:05

AW: REST.Json.TJson.ObjectToJsonString - Options nicht in JSON schreiben
 
Hallo jaenike,

tatsächlich hatte ich in der Klasse ein privates Attribut FOptions. Das hatte ich völlig übersehen.

[JSONMarshalledAttribute(False)]
FOptions: TJsonOptions;

Das hat das Problem gelöst.

Danke für die Hilfe.

Stefan

Uwe Raabe 14. Aug 2025 23:26

AW: REST.Json.TJson.ObjectToJsonString - Options nicht in JSON schreiben
 
Nur so am Rande: Obwohl die Klasse
Delphi-Quellcode:
JSONMarshalledAttribute
heißt, kann dieser Name bei der Verwendung als Attribut auf [JSONMarshalled(False)] gekürzt werden. Das erhöht die Lesbarkeit und verringert die Schreibarbeit. Die Programmierhilfe zeigt das übrigens auch genauso an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 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