Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't deserialize JSON in Unity 5.4 using JsonUtility. Child collection is always empty

The Model

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class GetPeopleResult
{
    public List<Person> people { get; set; }
    public GetPeopleResult()
    {
       this.people = new List<People>();
    }

    public static GetPeopleResult CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<GetPeopleResult>(jsonString);
    }

}
[System.Serializable]
public class Person
{
    public long id { get; set; }
    public string name { get; set; }
    public string email { get; set; }
    public string displayImageUrl { get; set; }

    public Person()
    {

    }
    public static Person CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<Person>(jsonString);
    }
}

The JSON

{
    "people":
    [{
        "id":1,"name":"John Smith",
        "email":"[email protected]",
        "displayImageUrl":"http://example.com/"
    }]
 }

The Code

string json = GetPeopleJson(); //This works
GetPeopleResult result = JsonUtility.FromJson<GetPeopleResult>(json);

After the call to FromJson, result is not null, but the people collection is always empty.

like image 320
Dave Avatar asked Nov 20 '25 08:11

Dave


1 Answers

After the call to FromJson, result is not null, but the people collection is always empty.

That's because Unity does not support property getter and setter. Remove the { get; set; } from all the classes you want to serialize and that should fix your empty collection.

Also, this.people = new List<People>(); should be this.people = new List<Person>();

[System.Serializable]
public class GetPeopleResult
{
    public List<Person> people;
    public GetPeopleResult()
    {
       this.people = new List<People>();
    }

    public static GetPeopleResult CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<GetPeopleResult>(jsonString);
    }

}
[System.Serializable]
public class Person
{
    public long id;
    public string name;
    public string email;
    public string displayImageUrl;

    public Person()
    {

    }
    public static Person CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<Person>(jsonString);
    }
}
like image 100
Programmer Avatar answered Nov 22 '25 21:11

Programmer