如何通过C#,Windows Phone中的给定ID访问嵌套的JSON对象?

时间:2013-01-04 04:33:19

标签: c# json windows-phone-7

我的JSON来自网址http://192.168.1.50/vantaa/api/place,看起来像这样 第一个问题是我如何从这个JSON获取数据。我需要在xaml列表页面中绑定它。

{
         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,网址将如下http://192.168.1.50/vantaa/api/place/243

例如,有一个显示上述JSON数据的列表页面。一旦用户点击了位置id为243的文本块,它将导航到新页面,然后显示地址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#的新手,所以请简单解释一下。

2 个答案:

答案 0 :(得分: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包管理器来引用它。

答案 1 :(得分: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"];