Json to BigText

5. April 2018 08:17

Guten Morgen,

ich habe die Aufgabe eine App über einen WebService anzubinden.
Als Parameter wird ein Text übergeben, der eine JSON Struktur beinhaltet.
Diesen Text soll ich nun in XML umwandeln und dann als BigText in eine Funktion übergeben.
Bisher habe ich das folgendermaßen versucht.

Code:
lTempBlob.INIT;
lTempBlob.Blob.CREATEOUTSTREAM(lstmoOutStream);
lstmoOutStream.WRITE(piJson);
lTempBlob.INSERT;
lTempBlob.Blob.CREATEINSTREAM(lstmiInStream);
lcuGetJsonStructure.JsonToXMLCreateDefaultRoot(lstmiInStream, lstmoOutStream);
BigText.WRITE(lstmoOutStreamOut);
lcuESCMWebserviceImport.LoadFile2TmpTabBlob('','', BigText);


Jedoch ist mein BigText immer leer.
Vielleicht hat ja jemand von euch noch eine Idee.

Mit freundlichen Grüßen
Karl
Zuletzt geändert von Kanubelkarl am 5. April 2018 10:11, insgesamt 1-mal geändert.

Re: Json to BigText

5. April 2018 09:53

Hallo Kanubekarl,

dein Quelltext ist leichter zu lesen und zu verstehen, wenn du ihn zwischen so genannte Code-Tags setzt. Insbesondere deine Formatierungen werden so auch beibehalten.

Daher bitten wir dich, vor und nach deinem Quelltext diese Code-Tags einzufügen. Beispiel:


[code]Dein Quelltext[/code]

Gruß, Kowa
MSDynamics.de-Team

Re: Json to BigText

5. April 2018 16:19

Hallo Karl,
ich habe keine direkte Lösung zu deinem Problem, aber vielleicht ein paar Ideen.
Das Parsen des JSON zu XML ist eigentlich ein Einzeiler. Dynamics NAV wird nach meinem Wissen mit der Newtonsoft JSON Bibliothek (Version 8, es gibt allerdings eine neuere Version zum Herunterladen auf der Hersteller-Seite) ausgeliefert. Hier ein Beispiel:
Code:
Name   DataType   Subtype   Length
JsonConvert   DotNet   Newtonsoft.Json.JsonConvert.'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'   
XmlDocument   DotNet   System.Xml.XmlDocument.'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
json   Text      


Code:
json := '{ name: "test", type: "art", value: 100 }';
XmlDocument := JsonConvert.DeserializeXmlNode(json, 'root');


Heraus kommt dabei folgendes Xml:
Code:
<root>
   <name>test</name>
   <type>art</type>
   <value>100</value>
</root>


Muss die Funktion wirklich mit einem BigText arbeiten? Text muss nicht mehr mit einer Länge deklariert werden. Dann wäre die Zuweisung viel leichter und du bräuchtest die ganzen Streams nicht mehr. Dein Funktionsaufruf wäre auch sehr viel leichter.
Code:
MeineCodeunit.MeineFunktion(XmlDocument.InnerXml); // Wenn du mit dem Xml als String und nicht mit einem Dokument-Objekt arbeiten möchtest


Vielleicht kannst du das verwenden, um dein Problem zu lösen.

Gruß
Christoph

Re: Json to BigText

6. April 2018 08:21

Guten Morgen,

vorab schon mal vielen Dank Christoph.
Ich habe wohl etwas zu fix über das Problem nachgedacht.
Die Funktion, welche ich aufrufen muss, ist leider nicht von mir geschrieben und wird an vielen Stellen verwendet.
Jedoch habe ich die nicht ganz schöne Lösung, die Funktion zu kopieren und den BigText zu einem Text zu ändern.
Vielen Dank für den Denkanstoß.

Code:
piJson := '{"root":' + piJson + '}';

lnetXmlDocument := lnetJsonConvert.DeserializeXNode(piJson,'root');
LoadFile2TmpTabBlob('Test','Customer', lnetXmlDocument.ToString);


Mit freundlichen Grüßen
Karl