2016-05-27 1 views
1

Ich möchte einen JSON dieses Formats in eine Liste von Objekten deserialisieren. Diese ist, was meine JSON wie folgt aussieht:Deserialisieren eines JSON-Arrays in C# in eine Liste

[{ 
     id : 3, 
     vraag : "Op de keyserlei zijn er te weinig ...", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 12, 
       antwoord : "Bomen", 
       inspraakvraag_id : "3", 
       aantal_gekozen : "452" 
      }, { 
       id : 13, 
       antwoord : "Vuilbakken", 
       inspraakvraag_id : "3", 
       aantal_gekozen : "777" 
      }, { 
       id : 14, 
       antwoord : "Fietsstallingen", 
       inspraakvraag_id : "3", 
       aantal_gekozen : "456" 
      } 
     ] 
    }, { 
     id : 5, 
     vraag : "Vind je dat er te veel geluidsoverlast in de binnenstad in het weekend", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 18, 
       antwoord : "Ja", 
       inspraakvraag_id : "5", 
       aantal_gekozen : "741" 
      }, { 
       id : 19, 
       antwoord : "Nee", 
       inspraakvraag_id : "5", 
       aantal_gekozen : "147" 
      }, { 
       id : 20, 
       antwoord : "Geen mening", 
       inspraakvraag_id : "5", 
       aantal_gekozen : "987" 
      } 
     ] 
    }, { 
     id : 4, 
     vraag : "Welk van de volgende evenementen zou je graag zien op de groenplaats?", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 15, 
       antwoord : "Tuinbouw Expo", 
       inspraakvraag_id : "4", 
       aantal_gekozen : "785" 
      }, { 
       id : 16, 
       antwoord : "Metal festival", 
       inspraakvraag_id : "4", 
       aantal_gekozen : "156" 
      }, { 
       id : 17, 
       antwoord : "Counter strike LAN party", 
       inspraakvraag_id : "4", 
       aantal_gekozen : "456" 
      } 
     ] 
    }, { 
     id : 2, 
     vraag : "In spark spoork noord zou ik graag ... zien", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 6, 
       antwoord : "Een speeltuin", 
       inspraakvraag_id : "2", 
       aantal_gekozen : "245" 
      }, { 
       id : 7, 
       antwoord : "Een fabriek", 
       inspraakvraag_id : "2", 
       aantal_gekozen : "241" 
      }, { 
       id : 8, 
       antwoord : "Een bos", 
       inspraakvraag_id : "2", 
       aantal_gekozen : "300" 
      } 
     ] 
    }, { 
     id : 1, 
     vraag : "Voel je je 's avonds veilig in de stad Berchem?", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 9, 
       antwoord : "Ja", 
       inspraakvraag_id : "1", 
       aantal_gekozen : "452" 
      }, { 
       id : 10, 
       antwoord : "Nee", 
       inspraakvraag_id : "1", 
       aantal_gekozen : "721" 
      }, { 
       id : 11, 
       antwoord : "Niet van toepassing.", 
       inspraakvraag_id : "1", 
       aantal_gekozen : "123" 
      } 
     ] 
    } 
] 

Dies ist, was mein Haupt Code wie folgt aussieht:

var vraagTest = JsonUtility.FromJson<List<vraag>>(www.text); 

meine Klassen:

[System.Serializable] 
public class vraag { 

    public int id; 
    public string vraagg; 
    public int fase_id; 
    public List<antwoorden> antwoorden; 

} 

und

[Serializable] 
public class antwoorden { 
    public int id; 
    public string antwoord; 
    public int inspraakvraag_id; 
    public int aantal_gekozen; 
} 

Ich habe einige Lösungen auf dem i versucht nternet aber ich bekomme immer wieder den gleichen Fehler:

ArgumentException: JSON must represent an object type. 

ich auch die erste Liste in eine andere Klasse setzen versucht haben, aber ich habe das gleiche Problem:

[Serializable] 
public class vragenlijst{ 
    public List<vragenlijst> vragen; 
} 

EDIT

I behebt das Problem! Ich habe es behoben, indem ich den JSON um ein Objekt gewickelt habe, anscheinend unterstützt JsonUtility "keine Array-Typen für die JSON-Deserialisierung der obersten Ebene (wie Info []). Sie müssen den JSON in ein Objekt einfügen".

Dies ist mein ARBEITSCode:

{ 
vragen: [ 
{ 
id: 2, 
vraag: "In spark spoork noord zou ik graag ... zien", 
fase_id: "1", 
antwoorden: [ 
{ 
id: 6, 
antwoord: "Een speeltuin", 
inspraakvraag_id: "2", 
aantal_gekozen: "245" 
}, 
{ 
id: 7, 
antwoord: "Een fabriek", 
inspraakvraag_id: "2", 
aantal_gekozen: "241" 
}, 
{ 
id: 8, 
antwoord: "Een bos", 
inspraakvraag_id: "2", 
aantal_gekozen: "300" 
} 
] 
}, 
{ 
id: 1, 
vraag: "Voel je je 's avonds veilig in de stad Berchem?", 
fase_id: "1", 
antwoorden: [ 
{ 
id: 9, 
antwoord: "Ja", 
inspraakvraag_id: "1", 
aantal_gekozen: "452" 
}, 
{ 
id: 10, 
antwoord: "Nee", 
inspraakvraag_id: "1", 
aantal_gekozen: "721" 
}, 
{ 
id: 11, 
antwoord: "Niet van toepassing.", 
inspraakvraag_id: "1", 
aantal_gekozen: "123" 
} 
] 
}, 
{ 
id: 3, 
vraag: "Op de keyserlei zijn er te weinig ...", 
fase_id: "1", 
antwoorden: [ 
{ 
id: 12, 
antwoord: "Bomen", 
inspraakvraag_id: "3", 
aantal_gekozen: "452" 
}, 
{ 
id: 13, 
antwoord: "Vuilbakken", 
inspraakvraag_id: "3", 
aantal_gekozen: "777" 
}, 
{ 
id: 14, 
antwoord: "Fietsstallingen", 
inspraakvraag_id: "3", 
aantal_gekozen: "456" 
} 
] 
} 
] 
} 

Hauptcode:

var vraagTest = JsonUtility.FromJson<vragenlijst>(www.text); 

Klassen:

[Serializable] 
public class vragenlijst{ 
    public List<Vraag> vragen; 
} 

,

[System.Serializable] 
public class Vraag { 

    public int id; 
    public string vraag; 
    public int fase_id; 
    public List<antwoorden> antwoorden; 

} 

,

[Serializable] 
public class antwoorden { 
    public int id; 
    public string antwoord; 
    public int inspraakvraag_id; 
    public int aantal_gekozen; 
} 

Antwort

2
[System.Serializable] 
public class vraagClass 
{ 

    public int id; 
    public string vraag; 
    public int fase_id; 
    public List<antwoorden> antwoorden; 

} 
[Serializable] 
public class antwoorden 
{ 
    public int id; 
    public string antwoord; 
    public int inspraakvraag_id; 
    public int aantal_gekozen; 
} 

[Serializable] 
public class vragenlijst 
{ 
    public List<vraagClass> vragen; 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     #region json 
     string jsonText = ""; 

     #endregion 

     using(StreamReader sr = new StreamReader(@"E:\WIP\DeserializeStackOverFlow\DeserializeStackOverFlow\Lib\abc.json")) 
     { 
      jsonText = sr.ReadToEnd(); 
     } 


     var vraagTest = JsonConvert.DeserializeObject<List<vraagClass>>(jsonText); 
    } 
} 

fix nur 2 Dinge:

  1. "vraag" Klasse kann nicht eine Eigenschaft "vraag", also den Namen der Klasse ändern [keine Probleme wie der Json-Array wird nicht genannt]
  2. ja wie von Bart vorgeschlagen, der Deserializer muss List sein, nicht die Basis "öffentliche Liste vragen;"
+0

Ich habe es durch Hinzufügen von {} um den JSON herum behoben, anscheinend unterstützt JsonUtility keine Array-Typen für JSON-Deserialisierung auf oberster Ebene (wie Info []). Sie müssen den JSON in ein Objekt einfügen. " Danke für die Hilfe! – Kamarov

+0

Wickeln Sie das JSOn-Array um ein Objekt * ich meinte – Kamarov

2

Ich nehme an, Sie eine Liste von vraag statt vragenlijst in Ihrem vragenlijst -Klasse benötigen:

[Serializable] 
public class vragenlijst{ 
    public List<vraag> vragen; 
} 

Dann

var vraagTest = JsonUtility.FromJson<vragenlijst>(www.text); 

statt

var vraagTest = JsonUtility.FromJson<List<vraag>>(www.text); 
verwenden

Da der Typ, den Sie deserialisieren möchten, vragenlijst ist, nicht List<vraag>.

+0

ich das jetzt haben: 'var vraagTest = JsonUtility.FromJson (www.text);' und diese: 'public class Vragenlijst { public List vragen; } ' aber ich bekomme immer noch den gleichen Fehler – Kamarov

+0

Sie brauchen eine Liste von' vraag' natürlich, 'vraagg' ist hoffentlich ein Tippfehler, nicht wahr? – HimBromBeere

+0

Ich habe das benutzt, weil ich bereits eine Variable namens vraag hatte, jetzt habe ich stattdessen eine Großzahl V benutzt. Ich habe genau das gemacht, was Sie gesagt haben, aber ich bekomme immer noch den gleichen Fehler:/ – Kamarov

Verwandte Themen