2017-02-26 1 views
0

Ich habe zwei Klasse:Unity C# zu konvertieren String zu JSON-Array Erro

[System.Serializable] 
public class oneTask{ 
    public string id; 
    public string username; 
    public string task; 
    public string category; 
    public string time; 
    public bool status; 

} 
public class taskcollection{ 
    public oneTask[] tasksjson; 
} 

Und meine Umwandlung ist

taskcollection temptasks = JsonUtility.FromJson<taskcollection> (jsonString); 

Aber es wird kommen mit einem Fehler: Argument: JSON muss ein Objekt darstellen Art. UnityEngine.JsonUtility.FromJson [taskcollection] (System.String json)

Könnte jemand helfen, wie Zeichenfolge in JSON-Array in Unity zu konvertieren? Die JSON ist wie:

[{"id":"1","username":"Hanslen","task":"Writing PEC cw2","category":"Study","time":"2016-11-18 00:00:00","status":false},{"id":"2","username":"Hanslen","task":"Prepare for MLE presentation","category":"Study","time":"2016-11-24 00:00:00","status":false},{"id":"3","username":"Hanslen","task":"Some testing task1","category":"Life","time":"2017-02-20 22:09:52","status":false},{"id":"4","username":"Hanslen","task":"Some testing task2","category":"Movie","time":"2017-02-20 22:09:52","status":true},{"id":"5","username":"Hanslen","task":"Some testing task3","category":"Life","time":"2017-02-20 22:09:55","status":false},{"id":"6","username":"Hanslen","task":"Some testing task4","category":"Shopping","time":"2017-02-20 22:09:55","status":false},{"id":"7","username":"Hanslen","task":"server","category":"test","time":"2017-02-21 17:38:32","status":true},{"id":"8","username":"Hanslen","task":"Website task adding","category":"Study","time":"2017-02-21 17:40:58","status":false},{"id":"9","username":"Hanslen","task":"Another website task adding","category":"undefined","time":"2017-02-21 17:53:01","status":false},{"id":"10","username":"Hanslen","task":"adasdasdsa","category":"Life","time":"2017-02-21 17:53:18","status":false}] 

EDIT:

Der Json vom Server nichts über taskcollection Klasse enthalten. Es hat nur Informationen über die oneTask Klasse. Sie haben JsonHelper.FromJson<oneTask>(jsonString);nichtJsonHelper.FromJson<taskcollection>(jsonString);

Sie die Json beheben müssen tun, dann JsonHelper es deserialisiert verwenden.

string fixJson(string value) 
{ 
    value = "{\"Items\":" + value + "}"; 
    return value; 
} 

//Fix Json 
jsonString = fixJson(jsonString); 
//Deserialize it 
oneTask[] temptasks = JsonHelper.FromJson<oneTask>(jsonString); 
+1

Können Sie nach, wie Sie Ihre JSON-String aussieht? –

+0

Veröffentlichen Sie Ihre JSON. Wir können nicht ohne das helfen. – Programmer

+0

Wo ist Ihre JsonString-Variable, bitte fügen Sie den Code –

Antwort

-1

Etwas zu beheben. Zuerst müssen Sie [System.Serializable] auf oneTask hinzufügen.

Von was ich in Ihrem JSON-String sehen kann, haben Sie es als Array auf oberster Ebene. Derzeit unterstützt Unity JsonUtility kein JSON-Array in den obersten Ebenen. Ich verwende diese Hilfsklasse, um JSON-Top-Level-Arrays verwenden zu können.

public class JsonHelper 
{ 
    public static T[] getJsonArray<T>(string json) 
    { 
     string newJson = "{ \"array\": " + json + "}"; 
     Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>> (newJson); 
     return wrapper.array; 
    } 

    [Serializable] 
    private class Wrapper<T> 
    { 
     public T[] array; 
    } 
} 

Und wie es in Ihrem Fall verwenden

oneTask[] objects = JsonHelper.getJsonArray<oneTask> (jsonString);