2016-04-15 12 views
2

Ich habe ein JSON-Array mit verschachtelten Objekten, ein Menü darstellt, wie folgt aus:Deserialize verschachtelte JSON-Array in C#

[ 
    [ 
     { 
     "name": "Item 1", 
     "id": 1 
     }, 
     { 
     "name": "Item 2", 
     "id": 2, 
     "children": [ 
     [ 
     { 
      "name": "Item 21", 
      "id": 21 
     } 
     ] 
     ] 
     }, 
     { 
     "name": "Item 3", 
     "id": 3, 
     "children": [ 
     [ 
     { 
      "name": "Item 31", 
      "id": 31, 
      "children": [ 
      [ 
      { 
      "name": "Item 311", 
      "id": 311 
      }, 
      { 
      "name": "Item 312", 
      "id": 312 
      } 
      ] 
      ] 
     }, 
     { 
      "name": "Item 32", 
      "id": 32 
     }, 
... 

Und ich will es deserialisieren JavaScriptSerializer verwenden. Ich habe einen Code wie unten gezeigt, funktioniert aber nicht.

var serializer = new JavaScriptSerializer(); 
var objects = serializer.Deserialize<Menu>(jsonData); 
... 


public class Menu 
    { 
     public int id { get; set; } 
     public string name { get; set; } 
     public Menu[] children { get; set; } 
    } 

Der Fehler, den ich bekomme, ist "Der Typ 'Menü' wird nicht unterstützt, um eine Matrix zu deserialisieren". Ich würde jede Hilfe bei der Deklaration des benutzerdefinierten Objekts zu schätzen wissen.

Prost.

+0

Das Menü ist ein HTML-Liste, die dann als JSON-Array serialisiert wird – Carlos

Antwort

5

Ihr Stammobjekt ist ein 2d von Objekten. Die Eigenschaften "children" sind auch 2d gezackte Arrays. So kann Ihr Menu Klasse muss sein:

public class Menu 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public Menu [][] children { get; set; } 
} 

Und deserialisieren Ihre JSON wie folgt:

var serializer = new JavaScriptSerializer(); 
var objects = serializer.Deserialize<Menu [][]>(jsonData); 

Alternativ, wenn Sie Listen Arrays bevorzugen, tun:

public class Menu 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public List<List<Menu>> children { get; set; } 
} 

Und dann

var objects = serializer.Deserialize<List<List<Menu>>>(jsonData); 
0

Könnte das Problem sein, dass die tatsächlichen Daten ein Array sind, aber Sie sagen es nur ein Menü zu erwarten?