JSON-String in D365FO mit X++-Code deserialisieren

Hallo alle,

Hoffe, es geht allen gut.

Heute sind wir hier, um eine der allgemeinen Anforderungen in jeder Integration zu lernen, nämlich wie JSON-Strings in D365FO/AX7 mit X++-Code deserialisiert werden.

Unten ist das JSON, das die Bevölkerungszahl nach Land zeigt, und unsere Anforderung ist es, alle diese Details im Infolog anzuzeigen oder in die AX-Tabelle einzufügen.

Lösung :
1) Erstellen Sie eine Vertragsklasse für den äußeren und den inneren Knoten.

2) Ohren FormJsonSerializer::deserializeObject Methode.

Beispiel-JSON: “Daten”: [

        {

            “ID Nation”“01000US”,

            “Nation”“United States”,

            “ID Year”2020,

            “Year”“2020”,

            “Population”326569308,

            “Slug Nation”“united-states”

        },

        {

            “ID Nation”“01000US”,

            “Nation”“United States”,

            “ID Year”2019,

            “Year”“2019”,

            “Population”324697795,

            “Slug Nation”“united-states”

        }]

Schritt 1: Erstellen Sie Vertragsklasse 1, um alle Werte des Datenknotens aufzunehmen.
Hinweis: Der DataMemberAttribute-Name sollte mit dem JSON-Schlüsselnamen übereinstimmen, dh Daten, ID-Nation

[DataContract]
interne abschließende Klasse TestJSONContract
{

String50 parmNationId, parmNation, parmYearId, parmYear, parmPopulation, parmSlugNation;

[DataMemberAttribute(‘ID Nation’)]
public String50 parmNationId(String50 _parmNationId = parmNationId)
{

parmNationId = _parmNationId;

parmNationId zurückgeben;

}

[DataMemberAttribute(‘Nation’)]

public String50 parmNation(String50 _parmNation = parmNation)

{

parmNation = _parmNation;

return parmNation;

}

[DataMemberAttribute(‘ID Year’)]

public String50 parmYearId(String50 _parmYearId = parmYearId)

{

parmYearId = _parmYearId;

return parmYearId;

}

[DataMemberAttribute(‘Year’)]

public String50 parmYear(String50 _parmYear = parmYear)

{

parmYear = _parmYear;

return parmYear;

}

[DataMemberAttribute(‘Population’)]
public String50 parmPopulation(String50 _parmPopulation = parmPopulation)
{

parmPopulation = _parmPopulation;

return parmPopulation;
}

[DataMemberAttribute(‘Slug Nation’)]
public String50 parmSlugNation(String50 _parmSlugNation = parmSlugNation)
{

parmSlugNation = _parmSlugNation;

return parmSlugNation;

}

}

Schritt 2: Erstellen Sie eine Vertragsklasse für den äußeren Knoten.

Wenn es in Ihrem Fall mehr als einen äußeren Knoten gibt, müssen Sie Ihre Klasse gemäß Ihrem JOSN erstellen. Beispiel: Wenn Sie Status- und Datenknoten in Ihrem JSON haben, aber “Status” vom Typ Zeichenfolge ist und der Knoten “Daten” mehrere Unterknoten enthält, müssen Sie in der folgenden Klasse ein weiteres Attribut mit Zeichenfolgentyp und Daten mit Listentyp erstellen.

[DataContract]
interne abschließende Klasse TestJSONDataContract

{
Parameterdaten auflisten;
[DataMemberAttribute(‘data’),DataCollectionAttribute(Types::class, classStr(TestJSONContract))]

öffentliche Liste parmData(List _parmData = parmData)
{
parmData = _parmData;

parmData zurückgeben;
}
}

Schritt 3: Erstellen Sie eine ausführbare Klasse, um Ihre API aufzurufen und das Ergebnis abzurufen.
interne abschließende Klasse TestConsumeAPITest
{

///

/// Eintrittspunkt der Klasse. Das System ruft diese Methode auf, wenn ein bestimmtes Menü |
/// ausgewählt ist oder wenn die Ausführung beginnt und diese Klasse als Startklasse festgelegt wird.
///

/// Die angegebenen Argumente.

public static void main(Args _args)
{

System.Net.HttpWebRequest webRequest;
System.Net.HttpWebResponse Webantwort;
System.Exception ex;
System.IO.Stream Antwortstrom;
System.IO.StreamReader Leser
p Ausgang
ListeEnumerator ListeEnumerator;

Versuchen
{
new InteropPermission(InteropKind::ClrInterop).assert();

webRequest = System.Net.WebRequest::Create(“##########”); //Ihre API-URL kommt hierher.

webRequest.Method = “GET”;
webRequest.ContentType = “application/json”;
webresponse = webRequest.GetResponse();
responseStream = webresponse.GetResponseStream();
reader = new System.IO.StreamReader (responseStream);

Ausgabe = reader.ReadToEnd();

TestJSONDataContract TestJSONDataContract = FormJsonSerializer::deserializeObject(classNum(TestJSONDataContract),output);

Liste listData = new List(Types::Class);

Listendaten = TestJSONDataContract.parmData();
listEnumerator = listData.getEnumerator();

while (listEnumerator.moveNext())
{

TestJSONContract jsonDataContract = listEnumerator.current();

info(strFmt(“Nation ID %1 : %2 = %3”,jsonDataCOntract.parmNationId(), jsonDataContract.parmNation(), jsonDataContract.parmPopulation());
}

}

Fang
{
Bsp = CLRInterop::getLastException().GetBaseException();
Fehler (z. B. get_Message ());

}

}

}

Letzter Schritt: Führen Sie Ihre ausführbare Klasse aus, um das API- und JSON-Format zu testen.

.

Author: admin

Leave a Reply

Your email address will not be published. Required fields are marked *