2015-12-28 28 views
0

我正在下載json數據,需要處理3個不同的情況,如下所示。綁定時可能有多個可能的有限值

這是我的JSON。正如可以看到,parts可以是3個不同的東西:

  • 一個null

  • 一個object保持陣列,

  • object持有object

這裏是JSON:

如果顯示部分是 -
{ 
     "page_number": "1", 
     "page_size": "10", 
     "page_count": "7", 
     "cars": { 
      "car": [ 
       { 
        "parts": null, <-- NULL 
        "model": "Honda" 
       }, 
       { 
        "parts": {  <-- OBJECT HOLDING ARRAY OF 2 OR MORE PARTS 
         "part": [ 
         { 
          "name": "muffler" 
         }, 
         { 
          "name": "gas pedal" 
         } 
         ] 
        }, 
        "model": "VW" 
       }, 
       { 
        "parts": {  <-- OBJECT HOLDING A PART OBJECT 
         "part": { 
         "name": "windshield" 
         } 
        }, 
        "model": "Toyota" 
       } 
      ] 
     } 
    } 

我處理JSON時,上述

  • N/A <需要獲得所有汽車所有部件的一部分的名字,讓我在我的文本框3以下得到顯示NULL
  • 消聲器,油門踏板< - 顯示如果份陣列的一部分對象
  • 擋風玻璃< - 顯示如果零件是部分對象

到目前爲止,我正在使用WebClient獲取所有JSON數據。我添加了Newtonsoft.Json塊。

UPDATE

我去json2csharp和生成的類這樣的上述JSON基於:

public class Parts 
{ 
    public object part { get; set; } 
} 

public class Car 
{ 
    public Parts parts { get; set; } 
    public string model { get; set; } 
} 

public class Cars 
{ 
    public List<Car> car { get; set; } 
} 

public class RootObject 
{ 
    public string page_number { get; set; } 
    public string page_size { get; set; } 
    public string page_count { get; set; } 
    public Cars cars { get; set; } 
} 

我的窗口DataContext設置爲我的ViewModel和我正在和顯示所有數據正確的除了汽車零件。我試圖這樣但是這本身明顯地結合不能處理3案件上方「:

<TextBox Name="txtCarParts" Text="{Binding Path = Parts.part}"/> 

綁定像這表明無論是空字符串或該:

這是不期望
System.Collections.Generic.List'1[CarsApp.part] 

+0

問題是什麼?你不能解析JSON,或者你有綁定的問題? – A191919

+0

如果'part'包含'Array',你想顯示什麼? – AnjumSKhan

+0

在您的Parts類中重寫'ToString()'方法,並提供所有3種情況的字符串表示形式。 – AnjumSKhan

回答

0

由於@AnjumSKhan,這裏是溶液

覆蓋的ToString()在零件類:

public override string ToString() 
{ 
    List<string> names = Parts.Select(o => o.Name).ToList(); 
    return string.Join(", ", names); ; 
} 

綁定:

<TextBox Name="txtCarParts" Text="{Binding Path = Parts}"/> 
相關問題