2017-04-05 9 views
2

Ich habe versucht, ein paar Stunden lang Daten von meinem Server für unser High-Score-System zu deserialisieren. Allerdings bin ich erhalte eine Fehlermeldung:Unity-Deserialisierung vom Server

ArgumentException: JSON must represent an object type.

Dies ist, wie ich bin Deserialisieren (scores ist vom Typ Scores):

public void Deserialize() 
{ 
    Debug.Log("From Server is ::::: -----> " + FromServer); 
    scores = JsonUtility.FromJson<Scores> (FromServer); 
} 

Das ist meine Json Informationen, die von meinem Server generiert wird. Was mache ich falsch?

[ 
    { 
     "ScoreID": "8", 
     "GoogleID": "asasda", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "11", 
     "GoogleID": "kjjahushcjkasjkcajskndas", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "10", 
     "GoogleID": "aakhskjbjkabsjjkasd", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "9", 
     "GoogleID": "mnbabksgkajsd", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "13", 
     "GoogleID": "kajiuskabkjshdkhausd", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "7", 
     "GoogleID": "asasdas,mgkhgjhbhjaf", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "6", 
     "GoogleID": "ss", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "5", 
     "GoogleID": "kljkuasjkba", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "4", 
     "GoogleID": "asdadasdasdasdw", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "3", 
     "GoogleID": "asdadsasd", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "2", 
     "GoogleID": "kbaskjkjsbnkjas", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "12", 
     "GoogleID": "lahaushyuiahkjsjksd", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "1", 
     "GoogleID": "254asdasd54a5s1das2d1as54d", 
     "Score": "259" 
    }, 
    { 
     "ScoreID": "14", 
     "GoogleID": "kjaskjhjkahsjkdnjkasd", 
     "Score": "6859" 
    } 
] 

und das sind die Klassen Ich versuche, serialisiert in:

[System.Serializable] 
public class LeaderBoardEntries 
{ 
    public int ScoreID; 
    public string GoogleID; 
    public int Score; 
} 
[System.Serializable] 
public class Scores 
{ 
    public List<LeaderBoardEntries> scores; 
} 
+1

Haben Sie mit einem 'Array' anstatt einer' List' versucht, so zu verfahren: 'public LeaderBoardEntries [] scores;' –

+1

Vielleicht sollten Ihre Werte eingegeben werden und keine Zeichenkette? Zum Beispiel "ScoreID": "5" sollte "ScoreID" sein: 5' –

+0

Sorry Kumpel wie meinst du? Auf meinem Server sind sie Typ int, google ID ist Typ varchar. –

Antwort

5

Sie nur 1 Objekt in der .json Datei, um sie über JsonUtility deserialisieren in der Lage sein kann. Ihre .json ist kein Objekt, sondern ein Array von Objekten. Es sollte in diesem Format sein:

{ 
    scores: [ 
    { 
     "ScoreID": "8", 
     "GoogleID": "asasda", 
     "Score": "258" 
    }, 
    { 
     "ScoreID": "11", 
     "GoogleID": "kjjahushcjkasjkcajskndas", 
     "Score": "258" 
    } 
    ] 
} 

diese .json Zeichenfolge in ein Scores Objekt deserialisiert werden.

Ich stimme zu Einheit sollte ihre Dokumentation ein wenig klarer machen. Sie müssen betonen, dass Sie .json-Dateien, die nur 1 Objekt darstellen, deserialisieren können.

+0

Danke dafür, aber es scheint nicht zu funktionieren, scores = JsonUtility.FromJson ("{\" scores \ ":" + FromServer + "}"); Ich habe die Anfangsstring zu diesem hinzugefügt, da mein Server dies natürlich nicht ausgibt, ich bekomme keine Fehler mehr, aber ich bekomme auch meine Klasse nicht gefüllt mit Informationen aus dem JSON –

+0

Es funktionierte, war ein einfacher Tippfehler. Vielen Dank! –