[ABAP] ABAPJSON Serializer / Deserializer

SELECT * FROM sflight INTO TABLE @DATA(it_flight).

* ABAP->JSON
DATA(lv_json) = /ui2/cl_json=>serialize( data = it_flight
                                         compress = abap_true
                                         pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).

WRITE: / lv_json.

DATA: it_flight_json TYPE STANDARD TABLE OF sflight WITH DEFAULT KEY.

* JSON->ABAP
/ui2/cl_json=>deserialize( EXPORTING
                             json = lv_json
                             pretty_name = /ui2/cl_json=>pretty_mode-camel_case
                           CHANGING
                             data = it_flight_json ).

* ABAP object ->JSON
DATA(o_descr) = cl_abap_typedescr=>describe_by_data( it_flight_json ).
DATA(lv_json2) = /ui2/cl_json=>serialize( o_descr ).

WRITE: / lv_json2.

Weiterführende Infos: Link

[ABAP] JSON (trex) -> itab

DATA: json type string VALUE '[{name: "Horst", title: "Herr", age: "30 "}, {name: "Jutta", title: "Frau", age: "35 "}, {name: "Ingo", title: "Herr", age: "31 "}]'.

TYPES: BEGIN OF s_person,
         name  TYPE string,
         title TYPE string,
         age   TYPE i,
       END OF s_person.

TYPES: t_person TYPE STANDARD TABLE OF s_person WITH DEFAULT KEY.

DATA(it_persons) = VALUE t_person( ).

* JSON (trex) -> ABAP (iTab)
DATA(o_trex) = NEW cl_trex_json_deserializer( ).
o_trex->deserialize( EXPORTING json = json
                     IMPORTING abap = it_persons ).

IF lines( it_persons ) > 0.
  WRITE: / it_persons[ 1 ]-name.
ENDIF.

[C#] JSON serialisieren/deserialisieren

JSON-Daten liegen in einem eigenen Format vor. Um dieses Datenformat in C# abzubilden benötigt man zuerst eine oder mehrere Klassen. Der Einfachheit halber kann man sich auf der Seite http://json2csharp.com/ aus dem JSON-Datenformat automatisiert C#-Klassen bauen lassen.

Als Beispiel dient folgende JSON-Datei:

{
"SerialNumber": "05857628",
"DateTime": "1415783932",
"Meters": [{
"InputNumber": "1",
"Name": "HZ Wirkleistung BZ 90612021",
"Type": "Electricity",
"Value": 2092224.000,
"Unit": "Wirkleistung"
},
{
"InputNumber": "2",
"Name": "HZ Blindleistung BZ 90612021",
"Type": "Electricity",
"Value": 2093763.500,
"Unit": "Blindleistung"
},
]
}

Die zugehörigen C#-Klassen sehen wie folgt aus:

using System.Collections.Generic;
using System.Runtime.Serialization;

namespace JSONTest
{
    [DataContract]
    public class Meter
    {
        [DataMember]
        public string InputNumber { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Type { get; set; }
        [DataMember]
        public double? Value { get; set; }
        [DataMember]
        public string Unit { get; set; }
    }

    [DataContract]
    public class Meter_List
    {
        [DataMember]
        public string SerialNumber { get; set; }
        [DataMember]
        public string DateTime { get; set; }
        [DataMember]
        public List<Meter-> Meters { get; set; }
    }
}

Im Code greift man nun folgendermaßen auf die Daten zu:

// im Projektbaum Verweis hinzufügen: System.Runtime.Serialization
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

private void btnGetJSON_Click(object sender, EventArgs e)
{
	// JSON-File von URL holen
	string contents = new System.Net.WebClient().DownloadString("www.datenquelle.de");

	// JSON deserialisieren
	DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Meter_List));
	MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(contents));
	Meter_List obj = (Meter_List)ser.ReadObject(stream);

	// Daten ausgeben
	Console.WriteLine(obj.SerialNumber);
	Console.WriteLine(obj.Meters.Count);
	Console.WriteLine(obj.Meters[0].Name);
}

Quelle: Serializing and Deserializing JSON in C#