1

I want to deserialize a json of this format into a List of objects. This is what my JSON looks like:

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

This is what my main code looks like:

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

my classes:

[System.Serializable]
public class vraag {

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

}

and

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

I've tried some solutions on the internet but I keep getting the same error:

ArgumentException: JSON must represent an object type.

I've also tried putting the first list into a different class, but I get the same problem:

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

EDIT

I fixed the problem! I fixed it by wrappin the JSON around an object, apparently JsonUtility "does not support array types for top-level JSON deserialization (like Info[]). You need to wrap the JSON in an object".

This is my WORKING CODE:

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

Main code:

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

Classes:

[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 Answers 2

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

Just fix 2 things :

  1. "vraag" Class can't have a property "vraag", so change the name of class [no issues as the json array isn't named ]
  2. yeah as suggested by Bart, the deserializer needs to be List not the base "public List vragen;"
Sign up to request clarification or add additional context in comments.

2 Comments

I fixed it by adding { } around the JSON, apparently JsonUtility "does not support array types for top-level JSON deserialization (like Info[]). You need to wrap the JSON in an object". Thanks for help!
Wrap the JSOn array around an object* I meant
2

I assume you will need a list of vraag instead of vragenlijst in your vragenlijst-class:

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

Then use

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

instead of

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

because the type you want to deserialize is vragenlijst, not List<vraag>.

4 Comments

I now have this: var vraagTest = JsonUtility.FromJson<vragenlijst>(www.text); and this: public class vragenlijst{ public List<vraagg> vragen; } but I still get the same error
You need a list of vraag of course, vraagg is hopefully a typo, isn´t it?
I used that because I had a variable called vraag already, now I used a capital V instead. I did exactly what you said but I still get the same error :/
I fixed it by wrapping the JSON around an object, apparently JsonUtility "does not support array types for top-level JSON deserialization (like Info[]). You need to wrap the JSON in an object". Thanks for help!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.