2017-01-03 12 views
-2

Können Sie Klammern mit dynamischen JSON ohne den Namen der Liste/Array in der JSON-Zeichenfolge angezeigt erstellen? Sonst muss ich den ganzen Abschnitt neu schreiben.Json.net dynamische Klammern ohne Namen

Das Problem ist, ich habe nicht herausgefunden, wie Klammern in dynamischen JSON ohne einen Namen, der davor kommt, zu erstellen. In meiner JSON-Zeichenfolge haben Werte eine übergeordnete Klammer, die alle Einträge umschließt, dann eine Klammer, die den Zeitstempel umschließt, und eine andere Klammer, die die Bücher umschließt. Die Klammern wrapping timestamp & Bücher sollten keine Namen haben, die vor ihnen erscheinen.

Mit dieser link bin ich sehr nah an das Format, das ich will, aber mir fehlt die Klammer Trennung für Zeit und die restlichen Einträge.

Beispielcode:

JObject jsonobject = new JObject(); 
JObject jsonobject2 = new JObject(); 
dynamic topObject = jsonobject; 
topObject.records = new JArray() as dynamic; 
dynamic midObject = jsonobject2; 
midObject.value = new JArray() as dynamic; 
dynamic record = new JObject(); 
record.TIMESTAMP = DateTime.Now.ToString("MMMM dd yyyy HH:mm:ss"); 
record.ID = "sampleid"; 
midObject.value.Add(record); 
//query for data 
//loop through query 
// add to record when data found ex:record.author=dr[0].ToString(); 
// midObject.value.Add(record); 
// finished add data from query 
topObject.records.Add(midObject); 

string jsonstr = topObject.ToString();  

Stromausgang:

{ 
"records": [ 
{ 
"value": [ 
{ 
"TIMESTAMP": "January 03 2017 09:46:15", 
"ID": "sampleID" 
}, 
{ 
"Title": "Book2", 
"Author": "author1" 
}, 
{ 
"Title": "Book1" 
"Author": "author1" 
"Notes": "testtest" 
} 
] 
} 
] 
} 

gewünschte Ausgabe:

{ 
"records": [ 
{ 
"value": [ 
[ ------->bracket wrapping timestamp 
{ 
"TIMESTAMP": "January 03 2017 09:46:15", 
"ID": "sampleID" 
} 
] ------->bracket wrapping timestamp 
, 
[ ------->bracket wrapping books 
{ 
"Title": "Book2", 
"Artist": "artist1" 
}, 
{ 
"Title": "Book1" 
"Artist": "artist1" 
"Notes": "testtest" 
} 
] ------->bracket wrapping books 
] 
} 
] 
} 

edit: Mai haben zu stark vereinfacht, aber Bücher Abschnitt hat mehr als 20 Felder. Jede JSON-Zeichenfolge hat nur einen Zeitstempel, kann aber pro Anfrage 100-1000 Bücher enthalten.

edit2: Titel/Erläuterung zur Hauptfrage.

+4

ein Objekt-Parser mit DTO Classes.The Code Verwenden Sie erstellen sehr wartbaren ist. –

+1

Die eckige Klammer, die Sie für Ihr timestamp-Objekt wünschen, bezeichnet eine Sammlung/ein Array. Wenn Sie den Typ in eine Sammlung ändern (Liste /Array []/IEnumerable <>), wird wahrscheinlich das gewünschte JSON-Format erreicht, die inneren Funktionen Ihrer Objekte werden jedoch geändert. – Theo

+1

Klammern kennzeichnen Arrays in der [JSON-Spezifikation] (http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). Es sei denn, Ihre Zeitstempel und Bücher werden wahrscheinlich mehrmals vorkommen, im Interesse der Wartbarkeit wie @ DanielCarbajalLópez erwähnt, halten Sie sich davon fern. – Gigabyte

Antwort

1

Soweit ich sehen kann, brauchen Sie nur ein anderes Array für alle Datensätze hinzuzufügen:

JObject jsonobject = new JObject(); 
JObject jsonobject2 = new JObject(); 
dynamic topObject = jsonobject; 
topObject.records = new JArray() as dynamic; 
dynamic midObject = jsonobject2; 
midObject.value = new JArray() as dynamic; 
dynamic arrayrecord = new JArray(); 
dynamic record = new JObject(); 
record.TIMESTAMP = DateTime.Now.ToString("MMMM dd yyyy HH:mm:ss"); 
record.ID = "sampleid"; 
arrayrecord.Add(record); 
midObject.value.Add(arrayrecord); 
//query for data 
//loop through query 
// add to record when data found ex:record.author=dr[0].ToString(); 
// midObject.value.Add(record); 
// finished add data from query 
topObject.records.Add(midObject); 

string jsonstr = topObject.ToString(); 
+0

Ihre Lösung hat funktioniert. Edit: dachte, es gab Syntaxfehler. – MADnoobie

+0

Was war der Fehler? Dieser Code funktionierte in LinqPad und erzeugte die richtige Ausgabe. Oh, vergiss XD –

Verwandte Themen