-2

我想从 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 中显示?

4

3 回答 3

1

您可以通过使用 ScriptMethod 属性装饰 webmethod 来定义 web 方法响应格式。代码就是这样。

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

一旦你得到 json 格式字符串的代码,你就可以用 json 解析它。

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

更新:

所以你必须从子字符串方法中<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 字符串。

于 2012-12-12T13:40:34.600 回答
0

您可能想使用 twitter 用 Scala 编写的 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、短信等)的不同类型的响应时很有用。

于 2012-12-12T11:04:06.387 回答
0

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

这是 JSON.Net 上的几个关键点(取自网站)

  • 灵活的 JSON 序列化器,用于在 .NET 对象和 JSON 之间进行转换
  • LINQ to JSON 用于手动读写 JSON
  • 高性能,比 .NET 的内置 JSON 序列化程序更快
  • 编写缩进、易读的 JSON
  • 将 JSON 与 XML 相互转换
  • 支持 .NET 2、.NET 3.5、.NET 4、Silverlight 和 Windows Phone
于 2012-12-12T11:04:53.907 回答