De JSON a Array de Objetos (JsonHelper)

Kolonic

Buenas tardes, llevo toda la mañana rompiendome la cabeza intentando pasar un JSON a un array mediante la clase JsonHelper, sin éxito. A ver si alguien me echa un cable a ver donde esta el fallo. Aclarar que estoy haciendo un juego en Unity (por si es Unity el que limita el codigo o algo).

El caso es que estoy intentando hacer un ranking con los jugadores y puntuaciones que tengo en una database en Firebase.

Como veis abajo con la clase WWW envió la ruta y el texto que me devuelve el www es ese json de abajo.

public void Ranking()
    {
        string url = "https://ejemplo.firebaseio.com/.json";
        WWW www = new WWW(url);
        StartCoroutine(WaitForRequest(www));

}
IEnumerator WaitForRequest(WWW www)
    {
        yield return www;

    // check for errors
    if (www.error == null)
    {
        User[] users;
        users = JsonHelper.FromJson<User>(www.text);

        Debug.Log("WWW Ok!: " + www.text);
    }
    else
    {
        Debug.Log("WWW Error: " + www.error);
    }
}
{"Eduardito":{"playerName":"Eduardito","playerScore":"4"},"Joel":{"playerName":"Joel","playerScore":"4"},"Karla":{"playerName":"Karla","playerScore":"5"},"Miguelin":{"playerName":"Miguelin","playerScore":"4"}}

Hasta aqui todo bien, la putada llega al a hora de usar la clase JsonHelper para pasarlo a un array. Todo el rato me devuelve NULL. No sé si es porque en la clase del User falla algo o no se. Alguien que se le ocurra algo? Grasias y mis dies.

Edit: La clase user simplemente tiene el constructor y las dos variables para el name y el score, nada más.

Meto la clase JsonHelper también

public static class JsonHelper
{
    public static User[] FromJson<User>(string json)
    {
        Wrapper<User> wrapper = JsonUtility.FromJson<Wrapper<User>>(json);

    Debug.Log(wrapper.Items);

    return wrapper.Items;
}

public static string ToJson<User>(User[] array)
{
    Wrapper<User> wrapper = new Wrapper<User>();
    wrapper.Items = array;
    return JsonUtility.ToJson(wrapper);
}

public static string ToJson<User>(User[] array, bool prettyPrint)
{
    Wrapper<User> wrapper = new Wrapper<User>();
    wrapper.Items = array;
    return JsonUtility.ToJson(wrapper, prettyPrint);
}

internal static string ArrayToJsonString<T>(User[] res, bool v)
{
    throw new NotImplementedException();
}

[Serializable]
private class Wrapper<User>
{
    public User[] Items;
}
}
PaCoX

bso del hilo

2 1 respuesta
P

jajajajaj PacoX ...... xDDD

antoniodela1

#2 he tardado 5 segundos en pillarlo jajaja

Kolonic

Lol por un segundo pensé que había creado el hilo en feda y no en dev xddddd

Czhincksx

Si la clase que quieres serializar no tiene diccionarios ni tipos complejos, puedes usar JsonUtility directamente.

[System.Serializable]
public class PlayersData {
	public PlayerData[] players;
}

[System.Serializable]
public struct PlayerData {
	public string player_id;
	public int player_score;
}

public void DeserlializeServerData(string _data) {
         PlayersData dataModel = JsonUtility.FromJson<PlayersData >(_data);
}

public void SerlializeServerData() {
         PlayersData data = new PlayersData ();
         data.players = new PlayerData[2];
         data.players[0].player_id = "Pepito";
         data.players[0].player_score = 4;
         data.players[1].player_id = "Trambolico";
         data.players[1].player_score = 9001;
         string jsonString = JsonUtility.ToJson(data);
}

1 respuesta
JuAn4k4

Un array es [{}, {}] y tu ko tienes un array, tienes objetos separados por NewLine

Kolonic

#6 Pensé que JsonUtility servía unicamente para devolver un solo Objeto y no un array, despues cuando salga del curro pruebo con esto y vuelvo a comentar, gracias!