从Windows Phone 7中的XML读取JSON并绑定到ListBox

时间:2012-12-12 10:48:14

标签: xml windows windows-phone-7

我想从XML响应中获取JSON数据。实际上Web服务正在返回响应如下:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
[
    {
        "id": 1,
        "name": "paresh",
    },
    {
        "id": 2,
        "name": "jacob",
    },
    {
        "id": 3,
        "name": "color",
    },
    {
        "id": 4,
        "name": "Adil color",
    }
]</string>

我已经提到了一些文章。如果响应只是XML,那么我可以实现如下:

   MyListBox.ItemsSource = from tweet in xmlTweets.Descendants("student")
                                          select new StudentItem
                                          {
                                              ID = tweet.Element("id").Value,
                                              Name = tweet.Element("name").Value,
                                          };

但是我的问题是获取内部的JSON,还要显示在ListBox中?

3 个答案:

答案 0 :(得分:1)

您可以通过使用ScriptMethod属性修改web方法来定义Web方法响应格式。 代码就像这样。

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

一旦你将获得json格式字符串中的代码,你可以在json中解析它。

如果您有任何疑惑,请告诉我。

更新

因此,您必须从substring方法手动删除<string>代码。 这是你的代码。

string Header = "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">";
        string str = "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">[{\"id\": 1,\"name\": \"paresh\"}]</string>";
        string TempStr = str.Remove(0, Header.Length);
        string FinalStr = TempStr.Substring(0, TempStr.Length - 9);

FinalStr是你的json字符串。

答案 1 :(得分:0)

您可能希望使用在Scala中编写的twitter的finagle将xml转换为json:

 val xmlResponse = <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
     [
         {
            "id": 1,
            "name": "paresh",
          },
          {
             "id": 2,
             "name": "jacob",
           },
           {
              "id": 3,
              "name": "color",
           },
          {
                "id": 4,
                "name": "james bond",
           }
     ]</string>

  val properties = (xmlResponse \\ "string")    //parse the xml

  val responseContent = xmlResponse.toSeq.toJson.toString()

您可以查看:

  println(responseContent)

在选择finagle之前,尝试使用scala中的一个简单示例,然后您可能想要探索finagle库。它可以用来处理来自众多服务器的不同类型的响应(电子邮件,asp.net,SQL,短信,仅举几例)。

答案 2 :(得分:0)

我将使用您发布的初始XML,然后使用诸如JSON.Net之类的库来操作XML,提取JSON并将其存储在对象中,然后再将其绑定到ListBox。

以下是JSON.Net上的几个要点(摘自网站)

  • 用于在.NET对象和JSON之间进行转换的灵活JSON序列化程序
  • LINQ to JSON用于手动读取和写入JSON
  • 高性能,比.NET的内置JSON序列化器更快
  • 书写缩进,易于阅读的JSON
  • 将XML转换为XML
  • 支持.NET 2,.NET 3.5,.NET 4,Silverlight和Windows Phone