JSON-Daten als Datenquelle verwenden

Hallo liebes Forum

Ich habe folgendes Anliegen:
Ich verwende als Datenquelle eine JSON-Datei mit folgendem Inhalt:

[
{
“PersonelNumber”:“050101”,
“PersonelIndex”:1,
“Name”:“Frei Urs”,
“Location”:“SG”,
“MondayOrderNumber”:“E2312766”,
“MondayObjectNumber”:“3A Com-Altenrhein”,
“MondayOrderCode”:“R”,
“MondayOrderColor”:“8AD4C4”,
“MondayVehicle”:“B02”,
“MondayDeparture”:“06:15”,
“MondayIsLeader”:“C”,
“MondayHotelNumber”:“”,
},
{
“PersonelNumber”:“050110”,
“PersonelIndex”:1,
“Name”:“Segmüller Leo”,
“Location”:“SG”,
“MondayOrderNumber”:null,
“MondayObjectNumber”:null,
“MondayOrderCode”:null,
“MondayOrderColor”:null,
“MondayVehicle”:null,
“MondayDeparture”:null,
“MondayIsLeader”:null,
“MondayHotelNumber”:null,
},
{
“PersonelNumber”:“050113”,
“PersonelIndex”:1,
“Name”:“Ottiger Patrick”,
“Location”:“SG”,
“MondayOrderNumber”:“J2340018”,
“MondayObjectNumber”:“Hoop-Vaduz”,
“MondayOrderCode”:“R”,
“MondayOrderColor”:“008080”,
“MondayVehicle”:“T64”,
“MondayDeparture”:“06:30”,
“MondayIsLeader”:“C”,
“MondayHotelNumber”:“”,
}
]

Ich möchte nun entsprechend den JsonDataProvider verwenden, um die Daten als Datenquelle List&Label zur Verfügung zu stellen.

Die Daten sollen als Tabelle mit dem Namen OperationsPlanningData zur Verfügung gestellt werden. Darunter sollten dann die Felder gemäss JSON-Daten zur Verfügung stehen (nach Möglichkeit mit Berücksichtigung des Datentypes - z.B. numerisch bei PersonelIndex). Konkret

Felder
|-- OperationsPlanningData
|-- PersonelNumber
|-- PersonelIndex
|-- Name
|-- Location
|-- …

Ist das mit dem JsonDataProvider möglich? Wenn ja, wie muss ich das genau einstellen? Wenn nein, gibt es eine andere Möglichkeit, mein Ziel zu erreichen?

Danke für eure Hile.

Viele Grüsse
Thomas

Hallo Thomas.

Dein Anliegen könnte wie folgt umgesetzt werden:

private void JSONDataProviderDemo(object sender, EventArgs e)
{
  using (ListLabel LL = new ListLabel())
  {
    string pathToJSON = @"dataFile.json";
    string jsonFile = File.ReadAllText(pathToJSON);
    JsonDataProvider provider = new JsonDataProvider(json: jsonFile);

    provider.FlattenStructure = true;
    provider.ArrayValueName = "OperationsPlanningData";
    provider.RootTableName = "rootTable";

    LL.DataSource = provider;

    LL.AutoProjectType = LlProject.List;
    LL.AutoProjectFile = @"template.lst";

    LL.AutoShowSelectFile = false;
    LL.Design();
  }
}

Im Designer sieht das dann so aus:

Beachte, dass Array-Objekte einer JSON-Datenquelle von List & Label immer als Tabelle umgesetzt werden und der “root”-Tabelle relational untergeordnet sind.

Notwendige Typanpassungen können ggf. über die FieldType-Eigenschaft das AutoDefineField-Event vorgenommen werden. In deinem Fall wird für PersonalIndex bereits im JSON ein Integer übergeben. Dies wird so dann auch vom Data Provider erkannt (erkennbar am kleinen Rautensymbol neben dem Feldnamen).

Alle Infos zur JsonDataProvider-Klasse findest du hier.

Auch interessant zum Thema: Unser SchemaAwareJsonDataProvider.

1 Like

Hallo Onursal
Top - funktioniert. Vielen Dank.

1 Like