Laden...

Json in Datatable deserialisieren mit untertabelle/nested table

Erstellt von Cornflake vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.771 Views
C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren
Json in Datatable deserialisieren mit untertabelle/nested table

System: C# 3.5 Datatable, newtonsoft JSON

Hallo Leute

Mal wieder son blöder Spezialfall.
Ich bekomme eine Jsondatei in der ein Array unterthalb des Hauptknotens existiert.
Die Jsondatei soll als Datatable deserialisiert werden und hat entsprechend auch eine per Relation verknüpfte Untertabelle. Nur wenn ich dass deserialisiere mit json, dann steht in der Unterverknüpfung nur System.String[] und es wird nichts in die Untertabelle geschrieben.
Hier der prinzipielle Aufbau:

Json Datei:


[
{
"id":11,
"titel":"blumen",
"menge":21,
"bezeichnungen":["rose","tulpe"]
},
{
"id":12,
"titel":"bäume",
"menge":"3",
"bezeichnungen":["birke","ahorn"]
}
]

Dataset:

dtHaupt 
- id   (int)
- titel (string)
- menge  (int)

dtSub
- id (int)
- bezeichnungen (string)

RelationHauptSub
-id (haupt)
-id (sub)

Code:


json = ...//Inhalt von Jsondatei
DataSet1.dtHauptDataTable testtabelle = JsonConvert.DeserializeObject<DataSet1.dtHauptDataTable>(json);

Anzeige der Datatable im Debugger:


id, titel, menge,bezeichnungen
11,blumen,21,System.String[]
12,bäume,3,System.String[]

Mir fehlt aber in der dtSub folgende Einträge


id,bezeichnung
11,rose
11,tulpe
12,birke
12,ahorn

Was muss ich im c# code ändern, damit es klappt?

Grüße Cornflake

T
708 Beiträge seit 2008
vor 7 Jahren

Hmm, ist ein gültiges Json und sieht auch gut im Json-Viewer aus.

Auch das automatische generieren in einer Klasse funktioniert wie erwartet:

public class RootObject
{
    public int id { get; set; }
    public string titel { get; set; }
    public object menge { get; set; }
    public List<string> bezeichnungen { get; set; }
}

http://json2csharp.com/

Was passiert, wenn Du erst in eine Klasse serialisierst und dann in eine DataTable?

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Hi
habe das serialisieren in eine Klasse hinbekommen. Sogar mit der Liste.
Aber wie klappt das jetzt mit dem Umwandeln in eine DataTable?

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Ok habe es jetzt mit einen anderen Weg hinbekommen.
Endziel soll eine CSV Datei sein.
Mit dem Tipp: Best practices for serializing objects to a custom string format for use in an output file hat es geklappt.

@trib: Danke für den Hinweis mit der Klasse und dem Link 😃 hat weitergeholfen