2016-05-27 5 views
1

Я хочу десериализовать json этого формата в список объектов. Это то, что моя JSON выглядит следующим образом:Deserialize массив JSON в C# в список

[{ 
     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" 
      } 
     ] 
    } 
] 

Это то, что мой основной код выглядит как:

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

мои классы:

[System.Serializable] 
public class vraag { 

    public int id; 
    public string vraagg; 
    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; 
} 

Я пробовал некоторые решения на i но я это интернет получаю ту же ошибку:

ArgumentException: JSON must represent an object type. 

Я также попытался поставить первый список в другой класс, но я получаю ту же проблему:

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

EDIT

I исправлена ​​проблема! Я исправил его, обернув JSON вокруг объекта, очевидно, JsonUtility «не поддерживает типы массивов для десериализации JSON верхнего уровня (например, Info []). Вам нужно обернуть JSON в объект».

Это мой рабочий код:

{ 
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" 
} 
] 
} 
] 
} 

Главный код:

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

Классы:

[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; 
} 

ответ

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); 
    } 
} 

Просто исправить 2 вещи:

  1. «vraag» Класс не может иметь свойство «vraag», поэтому изменить название класса [никаких проблем, как массив JSON не называется]
  2. Да, как предложил Барт, десериализатор должен быть списком, а не базовым «public List vragen»;
+0

Я исправил это, добавив {} вокруг JSON, очевидно, JsonUtility «не поддерживает типы массивов для десериализации JSON верхнего уровня (например, Info []). Вам нужно обернуть JSON в объект». Спасибо за помощь! – Kamarov

+0

Оберните массив JSOn вокруг объекта * Я имел в виду – Kamarov

2

Я предполагаю, что вы будете нуждаться в список vraag вместо vragenlijst в вашем vragenlijst -класса:

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

Затем используйте

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

вместо

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

, потому что тип, который вы хотите десериализовать, - vragenlijst, а не List<vraag>.

+0

теперь у меня есть это: 'вар vraagTest = JsonUtility.FromJson (www.text);' и это: 'общественный класс vragenlijst { общественности Список vragen; } ' , но я все равно получаю ту же ошибку – Kamarov

+0

Вам нужен список' vraag', конечно, 'vraagg', мы надеемся, опечатка, не так ли? – HimBromBeere

+0

Я использовал это, потому что у меня уже была переменная, называемая vraag, теперь вместо этого я использовал капитал V. Я сделал именно то, что вы сказали, но я все равно получаю ту же ошибку:/ – Kamarov

Смежные вопросы