2016-09-15 83 views
1

所以我使用JSON.net解析我的JSON,但我得到了錯誤的輸出爲List of List對象。這裏是我的JSON.net代碼:JSON解析值不顯示

var reader = new StreamReader(GenerateStreamFromString(decodedString)); 
      var rootObject = JsonConvert.DeserializeObject<RootObject>(reader.ReadToEnd()); 

txtOut.Text = rootObject.Results.output1.value.ColumnNames[0].ToString() + " : " + 
rootObject.Results.output1.value.Values[0].ToString(); 

這裏是JSON類:

public class Value 
{ 
    public List<string> ColumnNames { get; set; } 
    public List<string> ColumnTypes { get; set; } 
    public List<List<string>> Values { get; set; } 
} 

public class Output1 
{ 
    public string type { get; set; } 
    public Value value { get; set; } 
} 

public class Results 
{ 
    public Output1 output1 { get; set; } 
} 

public class RootObject 
{ 
    public Results Results { get; set; } 
} 

輸出應該是:

Scored Probabilities for Class "BackPocket" : 0.37687685364 

雖然我得到:

Scored Probabilities for Class "BackPocket" : System.Collections.Generic.List`1[System.String] 

我在哪裏做錯了?

謝謝。

P.S.下面是一個簡單的JSON:

{"Results":{"output1":{"type":"table","value":{"ColumnNames":["Scored Probabilities for Class \"BackPocket\"","Scored Probabilities for Class \"Ear\"","Scored Probabilities for Class \"Handbag\"","Scored Probabilities for Class \"SidePocket\"","Scored Labels"],"ColumnTypes":["Double","Double","Double","Double","String"],"Values":[["0.0249993801116943","0.999469399452209","0.00426889630034566","0.00104729761369526","Ear"]]}}}} 
+0

您的JSON是無效的。請查看http://json2csharp.com/# –

+0

爲什麼它應該是第一個值而不是'List'?畢竟你有一個列表清單,所以你需要指定你想要的那個「二級」列表的元素 – UnholySheep

+0

@ShannonHolsinger只是檢查和糾正。 –

回答

1

這是一個列表的列表。您目前只索引一個級別的深度。您需要深入索引兩個級別。

txtOut.Text = rootObject.Results.output1.value.ColumnNames[0].ToString() + " : " + 
rootObject.Results.output1.value.Values[0][0].ToString(); 
0

嘗試這是您的JSON類/類

[DataContract]  
public class Value 
{ 
[DataMember] 
public List<string> ColumnNames { get; set; } 
[DataMember] 
public List<string> ColumnTypes { get; set; } 
[DataMember] 
public List<List<string>> Values { get; set; } 
} 
[DataContract] 
public class Output1 
{ 
[DataMember] 
public string type { get; set; } 
[DataMember] 
public Value value { get; set; } 
} 
[DataContract] 
public class Results 
{ 
[DataMember] 
public Output1 output1 { get; set; } 
} 
[DataContract] 
public class RootObject 
{ 
[DataMember] 
public Results Results { get; set; } 
} 
+1

不需要這些屬性.... –

+0

是的,他們被自動添加 - 只要確保他的Json是正確的,因爲我不是當OP第一次發佈時。 –

1

因爲元素0是一個列表,您可以使用string.Join獲得打印字符串..

txtOut.Text = rootObject.Results.output1.value.ColumnNames[0].ToString() + " : " + 
       string.Join(";",rootObject.Results.output1.value.Values[0]); 

輸出爲:

Scored Probabilities for Class "BackPocket" : 0.0249993801116943;0.999469399452209;0.00426889630034566;0.00104729761369526;Ear