2013-01-04 24 views
0

我的JSON來自url http://192.168.1.50/vantaa/api/place,它看起來像這樣。
第一個問題是我如何從這個JSON獲取數據。我需要將它綁定在xaml列表頁面中。如何通過C#,Windows Phone中給定的ID訪問嵌套的JSON對象?

{ 
     places: [ 
      { 
       id: "243", 
       title: "Abrams ja Husbacka", 
       latitude: "60.25627906773524", 
       longitude: "24.842572314971903", 
       www: "" 
      }, 
      { 
       id: "149", 
       title: "Alkupamaus", 
       latitude: "60.27657927084334", 
       longitude: "24.848795039886454", 
       www: "" 
      } 
     ] 
} 

我需要在新的xaml頁面中使用低於JSON。爲了得到低於JSON,url將看起來像這樣http://192.168.1.50/vantaa/api/place/243

例如,有一個顯示上面的JSON數據的列表頁面。一旦用戶點擊了地點ID243的文本塊,它將導航到新頁面,然後顯示如下所示的地點ID 243的綁定JSON數據。 (圖像數組是動態的)。

{ 
    id: "243", 
    title: "test 9 image", 
    description: "test 9 image", 
    latitude: "60.80943244516333", 
    longitude: "26.14554653906248", 
    www: "", 
    phone: "", 
    email: "", 
    contact_person: "", 
    address: { 
    street: "asdf", 
    postal_code: "12345", 
    post_office: "Vantaa" 
}, 
    images: [ 
      { 
      id: "100", 
      filename: "50c95e58b30db1.JPG", 
      path: "assets/images/" 
      }, 
      { 
      id: "101", 
      filename: "50c95e59207ad2.jpg", 
      path: "assets/images/" 
      }, 
      { 
      id: "102", 
      filename: "50c95e599076f3.jpg", 
      path: "assets/images/" 
      } 
    ] 
} 

對此問題有何建議?

ps:我是WP和C#的新手,所以請簡單說明一下。

回答

4

基於JSON創建對象。例如,一個Place對象將是:

public class Place 
{ 
    public string id {get; set;} 
    public string title {get; set; } 
    public string latitude {get; set; } 
    public string longitude {get; set; } 
    public string www {get; set;} 
} 

然後,您可以將JSON轉換爲頁面可以綁定到的對象。使用JSONConvert或JavaScriptSerializer

var somewhere = JsonConvert.DeserializeObject<Place>(json); 

JSONConvert是JSON.NET,是一個非常成熟的JSON庫。你也可以使用NuGET包管理器來引用它。

+0

我不明白了。你能提供完整的JsonCovert代碼嗎? –

+1

查看此博客文章,它將清除您對[JSON解析]的大部分懷疑(http://nkishorchandra.blogspot.in/2012/10/parsing-json-in-windows-phone.html) – nkchandra

+0

好吧,我得到了它現在但我怎樣才能將它綁定到UI? –

1

我會推薦JSON.NET庫。你可以通過NuGet包管理器獲取它。 (在解決方案資源管理器中右鍵點擊你的解決方案,然後點擊管理NuGet軟件包)

由於Keifer說你可以創建單獨的類來解析你的JSON。但是,如果您不希望JSON的每個部分都有類,則可以使用dynamic而不是var。您還需要下載JSON,但我假設您已經這麼做了,除非您需要我,否則我不會重述。

當您下載了JSON時,您需要反序列化它。像這樣: 我們將假設您在下載它之後將您的JSON命名爲jsonstring

dynamic somewhere = JsonConvert.DeserializeObject(jsonstring); 

解析JSON和獲取列表是反序列化將使用

JObject o = JObject.Parse(jsonstring); 
JArray items = (JArray)root["Places"];