![]() |
REST Service Encoding Escape Sequenz
Hallo,
ich habe in C# einen Webservice geschrieben. Dieser gibt in einer Abfrage einen XML String zurück. Wenn ich das Ergebnis mit Swagger oder direkt im Browser anschaue, sieht alles aus, wie gewünscht.
Code:
Wenn ich die API jedoch im Embarcadero REST Debugger oder mit den REST-Komponenten in Delphi abfrage, sind etliche Zeichen Escape-codiert ( " wird zu \", Zeilenvorschub wird zu \n ...).
<?xml version="1.0" encoding="utf-8"?><opc:TypeDictionary
DefaultByteOrder="LittleEndian"
Code:
Aktuell habe ich von dem ganzen REST-Gedöns noch nicht viel Ahnung, verschiedene Versuche mit Inhaltstyp ändern haben nicht zum Erfolg geführt.
"<?xml version=\"1.0\" encoding=\"utf-8\"?><opc:TypeDictionary\nDefaultByteOrder=\"LittleEndian\"\nTargetNamespace=\"http:\/\/www.
Muss ja aber irgendwas damit zu tun haben. Ich kann das Ergebnis natürlich auf der Delphi-Seite wieder umkonvertieren, aber schön ist anders. |
AW: REST Service Encoding Escape Sequenz
Ich glaube die Embarcadero-Komponenten verstehen kein XML, und aus deren Sicht hast du einfach einen String bekommen - Also macht er nochmal Anführungsstriche drum herum und maskiert die Sonderzeichen, wie es sich für einen JSON-String gehört.
So sieht das auf den ersten Blick für mich aus. Bingo: Quelle: ![]() Zitat:
|
AW: REST Service Encoding Escape Sequenz
REST ist aber JSON basiert und nicht XML. Lieferst du das XML als Teil eines JSON Objekts? Ist dem so, ist das absolut normal, da diese Zeichen in JSON escaped sein müssen. Du musst das JSON noch mit einem JSON-Parser verarbeiten und in ein Delphi Objekt wandeln, z.B. mit REST.JSON.pas.
Oder ist dein Webservice garkein REST-Server sonderne eine SOAP Server? Dieser liefert XML. Dann brauchst du aber auf Delphi Seite auch einen SOAP-Client und nicht den REST-Client. EDIT: Habe eben gelsen, dass REST auch XML liefern kann. Ich würde dir aber davon abraten. JSON ist die "Standard" Antwort in REST. Ich kenne keinen einzigen Webservice der da XML liefert. Das ist mit XML alles viel zu überblasen und mit JSON einfach viel einfacher und platz-/rechensparender. |
AW: REST Service Encoding Escape Sequenz
Zitat:
Das XML sollte im Response.Content auch korrekt ankommen. Lediglich der RESTDebugger ist stark JSON-lastig |
AW: REST Service Encoding Escape Sequenz
Zitat:
Ich habe jetzt kurz und schmerzlos doch die Umkonvertierung auf Delphi-Seite mit String-Replace reingefummelt. Die Funktion wird bei Programmstart ein einziges mal aufgerufen, dann isses halt nicht schön, aber funktioniert. JSON als Standardantwort: Ich bekomme den XML-String schon fertig aus einer untergeordneten Schnittstelle und reiche den in meinem Rest-Server nur als String an die Delphi-App weiter. |
AW: REST Service Encoding Escape Sequenz
Hauptsache ein paar Unit-Tests decken das vernünftig ab. Dann darf man da drinnen einiges an unschönen Dingen treiben.
So meine Meinung und so. |
AW: REST Service Encoding Escape Sequenz
Ich befürchte StringReplace ist ein gefährlich falscher Ansatz.
Notfalls eher (vom Prinzip her) sowas:
Delphi-Quellcode:
Obwohl das auch schon echt bäh ist!
type
TWhatEver = class FText : String; end; ... function ConvertMe(sVal : String) : String; var obj : TWhatEver; begin try obj := TJson.JsonToObject<TWhatEver>('{"text":' + sVal + '}'); try Result := obj.FText; finally obj.Free(); end; except Result := ''; end; end; Und bitte nochmal drüber schauen. LG Incocnito |
AW: REST Service Encoding Escape Sequenz
Zitat:
Nach meiner Definition (m.E. und auch wikipedia) hat das Format nichts mit REST zu tun. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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