【问题标题】:How to query data from json in c# windows phone如何在 c# windows phone 中从 json 查询数据
【发布时间】:2013-07-11 22:34:31
【问题描述】:

我是 Windows Phone 开发新手。我正在开发一个从 Web 服务获取 json 并对其进行解析并将其显示给应用程序的应用程序。我使用 json.net 来解析它。这是我的 json 文件:

[
{
    "id": "001",
    "title": "title1",
    "content": "sample content",
    "category_id": "3",
    "image": "defaultimg.jpg"
},

{
    "id": "021",
    "title": "title2",
    "content": "sample content",
    "category_id": "1",
    "image": "defaultimg2.jpg"
},

{
    "id": "011",
    "title": "title3",
    "content": "sample content",
    "category_id": "3",
    "image": "defaultimg22.jpg"
},

{
    "id": "008",
    "title": "title24",
    "content": "sample content",
    "category_id": "2",
    "image": "defaultimg12.jpg"
},
{
    "id": "121",
    "title": "title12",
    "content": "sample content",
    "category_id": "3",
    "image": "defaultimg27.jpg"
}
]

所以我在 json2csharp.com 的帮助下想出了这个类

    public class RootObject
{
    public string id { get; set; }
    public string title { get; set; }
    public string content { get; set; }
    public string category_id { get; set; }
    public string image { get; set; }
}

这是我的cs代码

 var data = new WebClient();
            Observable
              .FromEvent<DownloadStringCompletedEventArgs>(data, "DownloadStringCompleted")
              .Subscribe(r =>
              {
                  var deserialized =
                    JsonConvert.DeserializeObject<List<RootObject>>(r.EventArgs.Result);
                  ListBox1.ItemsSource = deserialized;
              });
            data.DownloadStringAsync(
              new Uri("http://sampleurl.com/xyz/myjson.aspx"));

我只想显示那些在 listbox1 上有 "category_id": "9" 的人 你能帮我如何过滤这些数据吗?我是 c# windows phone 的学生和新手。谢谢!

【问题讨论】:

  • 您遇到的错误是什么?您能提供您尝试显示它们的代码吗?
  • 我刚刚尝试了@jbabey 给我的语法:ListBox1.ItemsSource = deserialized.Where(r => r.category_id == 9); “不能在此范围内声明名为 'r' 的局部变量,因为它会给 'r' 赋予不同的含义,后者已在'父或当前'范围内用于表示其他内容”
  • 好吧,酷!您始终可以使用“编辑”链接按钮将这些信息添加到您的原始帖子中。人们通常用粗体写“编辑”,然后添加缺少的信息 :) 请记住,您始终可以编辑自己的帖子 :) 欢迎使用 SO btw,如果您想了解有关社区的更多信息,我建议您也看看我们的帮助部分:stackoverflow.com/help 祝你好运。

标签: c# windows-phone-7 json.net


【解决方案1】:

您通常希望使用LINQ 来操作您的List&lt;RootObject&gt;,例如:

var deserialized = JsonConvert.DeserializeObject<List<RootObject>>(r.EventArgs.Result);

// select only RootObjects with category_id equal to 9
ListBox1.ItemsSource = deserialized.Where(r => r.category_id == 9);

【讨论】:

  • 嗨@jbabey,我试过你的语法,它给了我这个错误:不能在这个范围内声明一个名为'r'的局部变量,因为它会给'r'赋予不同的含义,即已在“父级或当前”范围内用于表示其他内容
  • @LadzAngeles 然后将其更改为其他名称。
【解决方案2】:

如果 API 本身没有允许您仅使用 category_id : 9 查询那些记录的端点,那么您必须在客户端进行过滤以填充您的列表框。一种常见且简单的方法是使用LINQ

以下是 LINQ 语法的示例:

  var categoryNineOnly = data.Where(x=>x.category_id == 9)

这里有更多细节:

http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多